<!DOCTYPE html>
<html >
<head>
    <meta charset="UTF-8">
    <title>404 错误</title>
    <meta name="keywords" content="木头科技, APP开发, 网站开发, 微信开发, 微信小程序开发" />
    <meta name="description" content="浙江木头网络科技有限公司是一家APP开发, 网站开发, 微信开发, 微信小程序开发的科技公司。" />
    <style>
        body, html {width: 100%;height: 100%;margin: 0;padding: 0;overflow: hidden;font-family: sans-serif;background-color: #262626;}
        canvas {background-color: #262626;}
        .credits {position: fixed;bottom: 15px;right: 15px;font-size: 1em; opacity: 0.6;z-index: 1;font-size: 0.35em;letter-spacing: 2px;color: #fff;}
        .error {position: fixed;top: 50px;left: 0px;z-index: 2; letter-spacing: 2px; color: #fff; text-align: center; width: 100%;text-shadow:0 2px 0 #000;}
        .error dl{overflow: hidden; padding: 0; margin: 0;}
        .error dl dt{font-size: 150px; font-weight: 900}
        .error dl dd{ font-size: 16px; font-weight: 300; color:#ffff00}
        .error dl dd b{opacity: 0.6; font-size: 40px; font-weight: 500; line-height: 100px; color:#fff}
        a, a:hover, a:visited {color: #fff;text-decoration: none;}
    </style>
</head>
<body>
<div class="error">
    <dl>
        <dt>404</dt>
        <dd><b>非常抱歉，页面没有找到。</b></dd>
        <dd>技术支持热线： 15355688333  QQ：106079595 微信： jtys114  </dd>
    </dl>
</div>
<div class="credits">
    &copy; 浙江木头网络科技有限公司
</div>
<script type="text/javascript">
    (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){"use strict";var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor}}();Object.defineProperty(exports,"__esModule",{value:true});var _three=require("three");var _three2=_interopRequireDefault(_three);var _Wave=require("./objects/Wave");var _Wave2=_interopRequireDefault(_Wave);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}window.THREE=_three2.default;var Webgl=function(){function Webgl(width,height){_classCallCheck(this,Webgl);this.params={usePostprocessing:false};this.scene=new _three2.default.Scene;this.camera=new _three2.default.PerspectiveCamera(50,width/height,1,1e3);this.camera.position.z=100;this.renderer=new _three2.default.WebGLRenderer;this.renderer.setSize(width,height);this.renderer.setClearColor(2500134);this.composer=null;this.initPostprocessing();this.clock=new _three2.default.Clock(true);this.wave=new _Wave2.default;this.wave.position.set(0,0,0);this.scene.add(this.wave)}_createClass(Webgl,[{key:"initPostprocessing",value:function initPostprocessing(){if(!this.params.usePostprocessing){return}}},{key:"resize",value:function resize(width,height){if(this.composer){this.composer.setSize(width,height)}this.camera.aspect=width/height;this.camera.updateProjectionMatrix();this.renderer.setSize(width,height)}},{key:"render",value:function render(){if(this.params.usePostprocessing){}else{this.renderer.render(this.scene,this.camera)}var t=this.clock.getElapsedTime();this.wave.update(t)}}]);return Webgl}();exports.default=Webgl},{"./objects/Wave":3,three:8}],2:[function(require,module,exports){"use strict";var _Webgl=require("./Webgl");var _Webgl2=_interopRequireDefault(_Webgl);var _raf=require("raf");var _raf2=_interopRequireDefault(_raf);require("gsap");function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}var webgl=undefined;var gui=undefined;webgl=new _Webgl2.default(window.innerWidth,window.innerHeight);document.body.appendChild(webgl.renderer.domElement);window.addEventListener("resize",resizeHandler);animate();function resizeHandler(){webgl.resize(window.innerWidth,window.innerHeight)}function animate(){(0,_raf2.default)(animate);webgl.render()}},{"./Webgl":1,gsap:4,raf:7}],3:[function(require,module,exports){"use strict";var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor}}();Object.defineProperty(exports,"__esModule",{value:true});var _three=require("three");var _three2=_interopRequireDefault(_three);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _possibleConstructorReturn(self,call){if(!self){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return call&&(typeof call==="object"||typeof call==="function")?call:self}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function, not "+typeof superClass)}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass)Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass}var Wave=function(_THREE$Object3D){_inherits(Wave,_THREE$Object3D);function Wave(){_classCallCheck(this,Wave);var _this=_possibleConstructorReturn(this,Object.getPrototypeOf(Wave).call(this));_this.ready=false;_this.particleSprite;_this.uniforms={time:{type:"f",value:0}};_this.nbParticles=0;_this.particleSize=2;_this.plane=new _three2.default.PlaneGeometry(150,100,150,150);_this.geometry=new _three2.default.BufferGeometry;_this.material=new _three2.default.ShaderMaterial({uniforms:_this.uniforms,vertexShader:"#define GLSLIFY 1\nattribute float size;\n\nuniform float time;\n\nvoid main() {\n  vec3 newPosition = position;\n  float displacement = sin( (position.x + time) * 0.3 ) * 2.0 +\n                        sin( (position.y + time) * 0.2 ) * 2.0;\n\n  newPosition.z = displacement * (.06 * cos(0.5 * time) * position.x - 0.04 * position.y * sin(0.5 * time));\n  // newPosition.z = displacement * 2.0 * sin(.06 * cos(time) * position.x + 0.04 * position.y * sin(time));\n\n  // gl_PointSize = (sin( (position.x + time) * 0.3 ) + 1.0 ) * 1.5 +\n  //                 (sin( (position.y + time) * 0.2 ) + 1.0 ) * 1.5;\n\n  gl_PointSize = 2.0;\n\n  gl_Position = projectionMatrix * modelViewMatrix * vec4( newPosition, 1.0 );\n}",fragmentShader:"#define GLSLIFY 1\nvoid main() {\n  gl_FragColor = vec4( 1.0, 1.0, 1.0, 0.45 );\n}",depthTest:false,transparent:true});_this.init();_this.points=new _three2.default.Points(_this.geometry,_this.material);_this.points.rotation.x=-.45*Math.PI;_this.add(_this.points);_this.ready=true;return _this}_createClass(Wave,[{key:"init",value:function init(){this.nbParticles=this.plane.vertices.length;this.positions=new Float32Array(this.nbParticles*3);this.sizes=new Float32Array(this.nbParticles);for(var i=0,i3=0;i<this.nbParticles;i++,i3+=3){this.positions[i3+0]=this.plane.vertices[i].x;this.positions[i3+1]=this.plane.vertices[i].y;this.positions[i3+2]=this.plane.vertices[i].z;this.sizes[i]=this.particleSize}this.geometry.addAttribute("position",new _three2.default.BufferAttribute(this.positions,3));this.geometry.addAttribute("size",new _three2.default.BufferAttribute(this.sizes,1))}},{key:"update",value:function update(t){if(!this.ready){return}this.material.uniforms.time.value=t}}]);return Wave}(_three2.default.Object3D);exports.default=Wave},{three:8}],4:[function(require,module,exports){(function(global){var _gsScope=typeof module!=="undefined"&&module.exports&&typeof global!=="undefined"?global:this||window;(_gsScope._gsQueue||(_gsScope._gsQueue=[])).push(function(){"use strict";_gsScope._gsDefine("TweenMax",["core.Animation","core.SimpleTimeline","TweenLite"],function(Animation,SimpleTimeline,TweenLite){var _slice=function(a){var b=[],l=a.length,i;for(i=0;i!==l;b.push(a[i++]));return b},_applyCycle=function(vars,targets,i){var alt=vars.cycle,p,val;for(p in alt){val=alt[p];vars[p]=typeof val==="function"?val.call(targets[i],i):val[i%val.length]}delete vars.cycle},TweenMax=function(target,duration,vars){TweenLite.call(this,target,duration,vars);this._cycle=0;this._yoyo=this.vars.yoyo===true;this._repeat=this.vars.repeat||0;this._repeatDelay=this.vars.repeatDelay||0;this._dirty=true;this.render=TweenMax.prototype.render},_tinyNum=1e-10,TweenLiteInternals=TweenLite._internals,_isSelector=TweenLiteInternals.isSelector,_isArray=TweenLiteInternals.isArray,p=TweenMax.prototype=TweenLite.to({},.1,{}),_blankArray=[];TweenMax.version="1.18.0";p.constructor=TweenMax;p.kill()._gc=false;TweenMax.killTweensOf=TweenMax.killDelayedCallsTo=TweenLite.killTweensOf;TweenMax.getTweensOf=TweenLite.getTweensOf;TweenMax.lagSmoothing=TweenLite.lagSmoothing;TweenMax.ticker=TweenLite.ticker;TweenMax.render=TweenLite.render;p.invalidate=function(){this._yoyo=this.vars.yoyo===true;this._repeat=this.vars.repeat||0;this._repeatDelay=this.vars.repeatDelay||0;this._uncache(true);return TweenLite.prototype.invalidate.call(this)};p.updateTo=function(vars,resetDuration){var curRatio=this.ratio,immediate=this.vars.immediateRender||vars.immediateRender,p;if(resetDuration&&this._startTime<this._timeline._time){this._startTime=this._timeline._time;this._uncache(false);if(this._gc){this._enabled(true,false)}else{this._timeline.insert(this,this._startTime-this._delay)}}for(p in vars){this.vars[p]=vars[p]}if(this._initted||immediate){if(resetDuration){this._initted=false;if(immediate){this.render(0,true,true)}}else{if(this._gc){this._enabled(true,false)}if(this._notifyPluginsOfEnabled&&this._firstPT){TweenLite._onPluginEvent("_onDisable",this)}if(this._time/this._duration>.998){var prevTime=this._time;this.render(0,true,false);this._initted=false;this.render(prevTime,true,false)}else if(this._time>0||immediate){this._initted=false;this._init();var inv=1/(1-curRatio),pt=this._firstPT,endValue;while(pt){endValue=pt.s+pt.c;pt.c*=inv;pt.s=endValue-pt.c;pt=pt._next}}}}return this};p.render=function(time,suppressEvents,force){if(!this._initted)if(this._duration===0&&this.vars.repeat){this.invalidate()}var totalDur=!this._dirty?this._totalDuration:this.totalDuration(),prevTime=this._time,prevTotalTime=this._totalTime,prevCycle=this._cycle,duration=this._duration,prevRawPrevTime=this._rawPrevTime,isComplete,callback,pt,cycleDuration,r,type,pow,rawPrevTime;if(time>=totalDur){this._totalTime=totalDur;this._cycle=this._repeat;if(this._yoyo&&(this._cycle&1)!==0){this._time=0;this.ratio=this._ease._calcEnd?this._ease.getRatio(0):0}else{this._time=duration;this.ratio=this._ease._calcEnd?this._ease.getRatio(1):1}if(!this._reversed){isComplete=true;callback="onComplete";force=force||this._timeline.autoRemoveChildren}if(duration===0)if(this._initted||!this.vars.lazy||force){if(this._startTime===this._timeline._duration){time=0}if(time===0||prevRawPrevTime<0||prevRawPrevTime===_tinyNum)if(prevRawPrevTime!==time){force=true;if(prevRawPrevTime>_tinyNum){callback="onReverseComplete"}}this._rawPrevTime=rawPrevTime=!suppressEvents||time||prevRawPrevTime===time?time:_tinyNum}}else if(time<1e-7){this._totalTime=this._time=this._cycle=0;this.ratio=this._ease._calcEnd?this._ease.getRatio(0):0;if(prevTotalTime!==0||duration===0&&prevRawPrevTime>0){callback="onReverseComplete";isComplete=this._reversed}if(time<0){this._active=false;if(duration===0)if(this._initted||!this.vars.lazy||force){if(prevRawPrevTime>=0){force=true}this._rawPrevTime=rawPrevTime=!suppressEvents||time||prevRawPrevTime===time?time:_tinyNum}}if(!this._initted){force=true}}else{this._totalTime=this._time=time;if(this._repeat!==0){cycleDuration=duration+this._repeatDelay;this._cycle=this._totalTime/cycleDuration>>0;if(this._cycle!==0)if(this._cycle===this._totalTime/cycleDuration){this._cycle--}this._time=this._totalTime-this._cycle*cycleDuration;if(this._yoyo)if((this._cycle&1)!==0){this._time=duration-this._time}if(this._time>duration){this._time=duration}else if(this._time<0){this._time=0}}if(this._easeType){r=this._time/duration;type=this._easeType;pow=this._easePower;if(type===1||type===3&&r>=.5){r=1-r}if(type===3){r*=2}if(pow===1){r*=r}else if(pow===2){r*=r*r}else if(pow===3){r*=r*r*r}else if(pow===4){r*=r*r*r*r}if(type===1){this.ratio=1-r}else if(type===2){this.ratio=r}else if(this._time/duration<.5){this.ratio=r/2}else{this.ratio=1-r/2}}else{this.ratio=this._ease.getRatio(this._time/duration)}}if(prevTime===this._time&&!force&&prevCycle===this._cycle){if(prevTotalTime!==this._totalTime)if(this._onUpdate)if(!suppressEvents){this._callback("onUpdate")}return}else if(!this._initted){this._init();if(!this._initted||this._gc){return}else if(!force&&this._firstPT&&(this.vars.lazy!==false&&this._duration||this.vars.lazy&&!this._duration)){this._time=prevTime;this._totalTime=prevTotalTime;this._rawPrevTime=prevRawPrevTime;this._cycle=prevCycle;TweenLiteInternals.lazyTweens.push(this);this._lazy=[time,suppressEvents];return}if(this._time&&!isComplete){this.ratio=this._ease.getRatio(this._time/duration)}else if(isComplete&&this._ease._calcEnd){this.ratio=this._ease.getRatio(this._time===0?0:1)}}if(this._lazy!==false){this._lazy=false}if(!this._active)if(!this._paused&&this._time!==prevTime&&time>=0){this._active=true}if(prevTotalTime===0){if(this._initted===2&&time>0){this._init()}if(this._startAt){if(time>=0){this._startAt.render(time,suppressEvents,force)}else if(!callback){callback="_dummyGS"}}if(this.vars.onStart)if(this._totalTime!==0||duration===0)if(!suppressEvents){this._callback("onStart")}}pt=this._firstPT;while(pt){if(pt.f){pt.t[pt.p](pt.c*this.ratio+pt.s)}else{pt.t[pt.p]=pt.c*this.ratio+pt.s}pt=pt._next}if(this._onUpdate){if(time<0)if(this._startAt&&this._startTime){this._startAt.render(time,suppressEvents,force)}if(!suppressEvents)if(this._totalTime!==prevTotalTime||isComplete){this._callback("onUpdate")}}if(this._cycle!==prevCycle)if(!suppressEvents)if(!this._gc)if(this.vars.onRepeat){this._callback("onRepeat")}if(callback)if(!this._gc||force){if(time<0&&this._startAt&&!this._onUpdate&&this._startTime){this._startAt.render(time,suppressEvents,force)}if(isComplete){if(this._timeline.autoRemoveChildren){this._enabled(false,false)}this._active=false}if(!suppressEvents&&this.vars[callback]){this._callback(callback)}if(duration===0&&this._rawPrevTime===_tinyNum&&rawPrevTime!==_tinyNum){this._rawPrevTime=0}}};TweenMax.to=function(target,duration,vars){return new TweenMax(target,duration,vars)};TweenMax.from=function(target,duration,vars){vars.runBackwards=true;vars.immediateRender=vars.immediateRender!=false;return new TweenMax(target,duration,vars)};TweenMax.fromTo=function(target,duration,fromVars,toVars){toVars.startAt=fromVars;toVars.immediateRender=toVars.immediateRender!=false&&fromVars.immediateRender!=false;return new TweenMax(target,duration,toVars)};TweenMax.staggerTo=TweenMax.allTo=function(targets,duration,vars,stagger,onCompleteAll,onCompleteAllParams,onCompleteAllScope){stagger=stagger||0;var delay=vars.delay||0,a=[],finalComplete=function(){if(vars.onComplete){vars.onComplete.apply(vars.onCompleteScope||this,arguments)}onCompleteAll.apply(onCompleteAllScope||vars.callbackScope||this,onCompleteAllParams||_blankArray)},cycle=vars.cycle,fromCycle=vars.startAt&&vars.startAt.cycle,l,copy,i,p;if(!_isArray(targets)){if(typeof targets==="string"){targets=TweenLite.selector(targets)||targets}if(_isSelector(targets)){targets=_slice(targets)}}targets=targets||[];if(stagger<0){targets=_slice(targets);targets.reverse();stagger*=-1}l=targets.length-1;for(i=0;i<=l;i++){copy={};for(p in vars){copy[p]=vars[p]}if(cycle){_applyCycle(copy,targets,i)}if(fromCycle){fromCycle=copy.startAt={};for(p in vars.startAt){fromCycle[p]=vars.startAt[p]}_applyCycle(copy.startAt,targets,i)}copy.delay=delay;if(i===l&&onCompleteAll){copy.onComplete=finalComplete}a[i]=new TweenMax(targets[i],duration,copy);delay+=stagger}return a};TweenMax.staggerFrom=TweenMax.allFrom=function(targets,duration,vars,stagger,onCompleteAll,onCompleteAllParams,onCompleteAllScope){vars.runBackwards=true;vars.immediateRender=vars.immediateRender!=false;return TweenMax.staggerTo(targets,duration,vars,stagger,onCompleteAll,onCompleteAllParams,onCompleteAllScope)};TweenMax.staggerFromTo=TweenMax.allFromTo=function(targets,duration,fromVars,toVars,stagger,onCompleteAll,onCompleteAllParams,onCompleteAllScope){toVars.startAt=fromVars;toVars.immediateRender=toVars.immediateRender!=false&&fromVars.immediateRender!=false;return TweenMax.staggerTo(targets,duration,toVars,stagger,onCompleteAll,onCompleteAllParams,onCompleteAllScope)};TweenMax.delayedCall=function(delay,callback,params,scope,useFrames){return new TweenMax(callback,0,{delay:delay,onComplete:callback,onCompleteParams:params,callbackScope:scope,onReverseComplete:callback,onReverseCompleteParams:params,immediateRender:false,useFrames:useFrames,overwrite:0})};TweenMax.set=function(target,vars){return new TweenMax(target,0,vars)};TweenMax.isTweening=function(target){return TweenLite.getTweensOf(target,true).length>0};var _getChildrenOf=function(timeline,includeTimelines){var a=[],cnt=0,tween=timeline._first;while(tween){if(tween instanceof TweenLite){a[cnt++]=tween}else{if(includeTimelines){a[cnt++]=tween}a=a.concat(_getChildrenOf(tween,includeTimelines));cnt=a.length}tween=tween._next}return a},getAllTweens=TweenMax.getAllTweens=function(includeTimelines){return _getChildrenOf(Animation._rootTimeline,includeTimelines).concat(_getChildrenOf(Animation._rootFramesTimeline,includeTimelines))};TweenMax.killAll=function(complete,tweens,delayedCalls,timelines){if(tweens==null){tweens=true}if(delayedCalls==null){delayedCalls=true}var a=getAllTweens(timelines!=false),l=a.length,allTrue=tweens&&delayedCalls&&timelines,isDC,tween,i;for(i=0;i<l;i++){tween=a[i];if(allTrue||tween instanceof SimpleTimeline||(isDC=tween.target===tween.vars.onComplete)&&delayedCalls||tweens&&!isDC){if(complete){tween.totalTime(tween._reversed?0:tween.totalDuration())}else{tween._enabled(false,false)}}}};TweenMax.killChildTweensOf=function(parent,complete){if(parent==null){return}var tl=TweenLiteInternals.tweenLookup,a,curParent,p,i,l;if(typeof parent==="string"){parent=TweenLite.selector(parent)||parent}if(_isSelector(parent)){parent=_slice(parent)}if(_isArray(parent)){i=parent.length;while(--i>-1){TweenMax.killChildTweensOf(parent[i],complete)}return}a=[];for(p in tl){curParent=tl[p].target.parentNode;while(curParent){if(curParent===parent){a=a.concat(tl[p].tweens)}curParent=curParent.parentNode}}l=a.length;for(i=0;i<l;i++){if(complete){a[i].totalTime(a[i].totalDuration())}a[i]._enabled(false,false)}};var _changePause=function(pause,tweens,delayedCalls,timelines){tweens=tweens!==false;delayedCalls=delayedCalls!==false;timelines=timelines!==false;var a=getAllTweens(timelines),allTrue=tweens&&delayedCalls&&timelines,i=a.length,isDC,tween;while(--i>-1){tween=a[i];if(allTrue||tween instanceof SimpleTimeline||(isDC=tween.target===tween.vars.onComplete)&&delayedCalls||tweens&&!isDC){tween.paused(pause)}}};TweenMax.pauseAll=function(tweens,delayedCalls,timelines){_changePause(true,tweens,delayedCalls,timelines)};TweenMax.resumeAll=function(tweens,delayedCalls,timelines){_changePause(false,tweens,delayedCalls,timelines)};TweenMax.globalTimeScale=function(value){var tl=Animation._rootTimeline,t=TweenLite.ticker.time;if(!arguments.length){return tl._timeScale}value=value||_tinyNum;tl._startTime=t-(t-tl._startTime)*tl._timeScale/value;tl=Animation._rootFramesTimeline;t=TweenLite.ticker.frame;tl._startTime=t-(t-tl._startTime)*tl._timeScale/value;tl._timeScale=Animation._rootTimeline._timeScale=value;return value};p.progress=function(value){return!arguments.length?this._time/this.duration():this.totalTime(this.duration()*(this._yoyo&&(this._cycle&1)!==0?1-value:value)+this._cycle*(this._duration+this._repeatDelay),false)};p.totalProgress=function(value){return!arguments.length?this._totalTime/this.totalDuration():this.totalTime(this.totalDuration()*value,false)};p.time=function(value,suppressEvents){if(!arguments.length){return this._time}if(this._dirty){this.totalDuration()}if(value>this._duration){value=this._duration}if(this._yoyo&&(this._cycle&1)!==0){value=this._duration-value+this._cycle*(this._duration+this._repeatDelay)}else if(this._repeat!==0){value+=this._cycle*(this._duration+this._repeatDelay)}return this.totalTime(value,suppressEvents)};p.duration=function(value){if(!arguments.length){return this._duration}return Animation.prototype.duration.call(this,value)};p.totalDuration=function(value){if(!arguments.length){if(this._dirty){this._totalDuration=this._repeat===-1?999999999999:this._duration*(this._repeat+1)+this._repeatDelay*this._repeat;this._dirty=false}return this._totalDuration}return this._repeat===-1?this:this.duration((value-this._repeat*this._repeatDelay)/(this._repeat+1))};p.repeat=function(value){if(!arguments.length){return this._repeat}this._repeat=value;return this._uncache(true)};p.repeatDelay=function(value){if(!arguments.length){return this._repeatDelay}this._repeatDelay=value;return this._uncache(true)};p.yoyo=function(value){if(!arguments.length){return this._yoyo}this._yoyo=value;return this};return TweenMax},true);_gsScope._gsDefine("TimelineLite",["core.Animation","core.SimpleTimeline","TweenLite"],function(Animation,SimpleTimeline,TweenLite){var TimelineLite=function(vars){SimpleTimeline.call(this,vars);this._labels={};this.autoRemoveChildren=this.vars.autoRemoveChildren===true;this.smoothChildTiming=this.vars.smoothChildTiming===true;this._sortChildren=true;this._onUpdate=this.vars.onUpdate;var v=this.vars,val,p;for(p in v){val=v[p];if(_isArray(val))if(val.join("").indexOf("{self}")!==-1){v[p]=this._swapSelfInParams(val)}}if(_isArray(v.tweens)){this.add(v.tweens,0,v.align,v.stagger)}},_tinyNum=1e-10,TweenLiteInternals=TweenLite._internals,_internals=TimelineLite._internals={},_isSelector=TweenLiteInternals.isSelector,_isArray=TweenLiteInternals.isArray,_lazyTweens=TweenLiteInternals.lazyTweens,_lazyRender=TweenLiteInternals.lazyRender,_globals=_gsScope._gsDefine.globals,_copy=function(vars){var copy={},p;for(p in vars){copy[p]=vars[p]}return copy},_applyCycle=function(vars,targets,i){var alt=vars.cycle,p,val;for(p in alt){val=alt[p];vars[p]=typeof val==="function"?val.call(targets[i],i):val[i%val.length]}delete vars.cycle},_pauseCallback=_internals.pauseCallback=function(){},_slice=function(a){var b=[],l=a.length,i;for(i=0;i!==l;b.push(a[i++]));return b},p=TimelineLite.prototype=new SimpleTimeline;TimelineLite.version="1.18.0";p.constructor=TimelineLite;p.kill()._gc=p._forcingPlayhead=p._hasPause=false;p.to=function(target,duration,vars,position){var Engine=vars.repeat&&_globals.TweenMax||TweenLite;return duration?this.add(new Engine(target,duration,vars),position):this.set(target,vars,position)};p.from=function(target,duration,vars,position){return this.add((vars.repeat&&_globals.TweenMax||TweenLite).from(target,duration,vars),position)};p.fromTo=function(target,duration,fromVars,toVars,position){var Engine=toVars.repeat&&_globals.TweenMax||TweenLite;return duration?this.add(Engine.fromTo(target,duration,fromVars,toVars),position):this.set(target,toVars,position)};p.staggerTo=function(targets,duration,vars,stagger,position,onCompleteAll,onCompleteAllParams,onCompleteAllScope){var tl=new TimelineLite({onComplete:onCompleteAll,onCompleteParams:onCompleteAllParams,callbackScope:onCompleteAllScope,smoothChildTiming:this.smoothChildTiming}),cycle=vars.cycle,copy,i;if(typeof targets==="string"){targets=TweenLite.selector(targets)||targets}targets=targets||[];if(_isSelector(targets)){targets=_slice(targets)}stagger=stagger||0;if(stagger<0){targets=_slice(targets);targets.reverse();stagger*=-1}for(i=0;i<targets.length;i++){copy=_copy(vars);if(copy.startAt){copy.startAt=_copy(copy.startAt);if(copy.startAt.cycle){_applyCycle(copy.startAt,targets,i)}}if(cycle){_applyCycle(copy,targets,i)}tl.to(targets[i],duration,copy,i*stagger)}return this.add(tl,position)};p.staggerFrom=function(targets,duration,vars,stagger,position,onCompleteAll,onCompleteAllParams,onCompleteAllScope){vars.immediateRender=vars.immediateRender!=false;vars.runBackwards=true;return this.staggerTo(targets,duration,vars,stagger,position,onCompleteAll,onCompleteAllParams,onCompleteAllScope)};p.staggerFromTo=function(targets,duration,fromVars,toVars,stagger,position,onCompleteAll,onCompleteAllParams,onCompleteAllScope){toVars.startAt=fromVars;toVars.immediateRender=toVars.immediateRender!=false&&fromVars.immediateRender!=false;return this.staggerTo(targets,duration,toVars,stagger,position,onCompleteAll,onCompleteAllParams,onCompleteAllScope)};p.call=function(callback,params,scope,position){return this.add(TweenLite.delayedCall(0,callback,params,scope),position)};p.set=function(target,vars,position){position=this._parseTimeOrLabel(position,0,true);if(vars.immediateRender==null){vars.immediateRender=position===this._time&&!this._paused}return this.add(new TweenLite(target,0,vars),position)};TimelineLite.exportRoot=function(vars,ignoreDelayedCalls){vars=vars||{};if(vars.smoothChildTiming==null){vars.smoothChildTiming=true}var tl=new TimelineLite(vars),root=tl._timeline,tween,next;if(ignoreDelayedCalls==null){ignoreDelayedCalls=true}root._remove(tl,true);tl._startTime=0;tl._rawPrevTime=tl._time=tl._totalTime=root._time;tween=root._first;while(tween){next=tween._next;if(!ignoreDelayedCalls||!(tween instanceof TweenLite&&tween.target===tween.vars.onComplete)){tl.add(tween,tween._startTime-tween._delay)}tween=next}root.add(tl,0);return tl};p.add=function(value,position,align,stagger){var curTime,l,i,child,tl,beforeRawTime;if(typeof position!=="number"){position=this._parseTimeOrLabel(position,0,true,value)}if(!(value instanceof Animation)){if(value instanceof Array||value&&value.push&&_isArray(value)){align=align||"normal";stagger=stagger||0;curTime=position;l=value.length;for(i=0;i<l;i++){if(_isArray(child=value[i])){child=new TimelineLite({tweens:child})}this.add(child,curTime);if(typeof child!=="string"&&typeof child!=="function"){if(align==="sequence"){curTime=child._startTime+child.totalDuration()/child._timeScale}else if(align==="start"){child._startTime-=child.delay()}}curTime+=stagger}return this._uncache(true)}else if(typeof value==="string"){return this.addLabel(value,position)}else if(typeof value==="function"){value=TweenLite.delayedCall(0,value)}else{throw"Cannot add "+value+" into the timeline; it is not a tween, timeline, function, or string."}}SimpleTimeline.prototype.add.call(this,value,position);if(this._gc||this._time===this._duration)if(!this._paused)if(this._duration<this.duration()){tl=this;beforeRawTime=tl.rawTime()>value._startTime;while(tl._timeline){if(beforeRawTime&&tl._timeline.smoothChildTiming){tl.totalTime(tl._totalTime,true)}else if(tl._gc){tl._enabled(true,false)}tl=tl._timeline}}return this};p.remove=function(value){if(value instanceof Animation){this._remove(value,false);var tl=value._timeline=value.vars.useFrames?Animation._rootFramesTimeline:Animation._rootTimeline;value._startTime=(value._paused?value._pauseTime:tl._time)-(!value._reversed?value._totalTime:value.totalDuration()-value._totalTime)/value._timeScale;return this}else if(value instanceof Array||value&&value.push&&_isArray(value)){var i=value.length;while(--i>-1){this.remove(value[i])}return this}else if(typeof value==="string"){return this.removeLabel(value)}return this.kill(null,value)};p._remove=function(tween,skipDisable){SimpleTimeline.prototype._remove.call(this,tween,skipDisable);var last=this._last;if(!last){this._time=this._totalTime=this._duration=this._totalDuration=0}else if(this._time>last._startTime+last._totalDuration/last._timeScale){this._time=this.duration();this._totalTime=this._totalDuration}return this};p.append=function(value,offsetOrLabel){return this.add(value,this._parseTimeOrLabel(null,offsetOrLabel,true,value))};p.insert=p.insertMultiple=function(value,position,align,stagger){return this.add(value,position||0,align,stagger)};p.appendMultiple=function(tweens,offsetOrLabel,align,stagger){return this.add(tweens,this._parseTimeOrLabel(null,offsetOrLabel,true,tweens),align,stagger)};p.addLabel=function(label,position){this._labels[label]=this._parseTimeOrLabel(position);return this};p.addPause=function(position,callback,params,scope){var t=TweenLite.delayedCall(0,_pauseCallback,params,scope||this);t.vars.onComplete=t.vars.onReverseComplete=callback;t.data="isPause";this._hasPause=true;return this.add(t,position)};p.removeLabel=function(label){delete this._labels[label];return this};p.getLabelTime=function(label){return this._labels[label]!=null?this._labels[label]:-1};p._parseTimeOrLabel=function(timeOrLabel,offsetOrLabel,appendIfAbsent,ignore){var i;if(ignore instanceof Animation&&ignore.timeline===this){this.remove(ignore)}else if(ignore&&(ignore instanceof Array||ignore.push&&_isArray(ignore))){i=ignore.length;while(--i>-1){if(ignore[i]instanceof Animation&&ignore[i].timeline===this){this.remove(ignore[i])}}}if(typeof offsetOrLabel==="string"){return this._parseTimeOrLabel(offsetOrLabel,appendIfAbsent&&typeof timeOrLabel==="number"&&this._labels[offsetOrLabel]==null?timeOrLabel-this.duration():0,appendIfAbsent)}offsetOrLabel=offsetOrLabel||0;if(typeof timeOrLabel==="string"&&(isNaN(timeOrLabel)||this._labels[timeOrLabel]!=null)){i=timeOrLabel.indexOf("=");if(i===-1){if(this._labels[timeOrLabel]==null){return appendIfAbsent?this._labels[timeOrLabel]=this.duration()+offsetOrLabel:offsetOrLabel}return this._labels[timeOrLabel]+offsetOrLabel}offsetOrLabel=parseInt(timeOrLabel.charAt(i-1)+"1",10)*Number(timeOrLabel.substr(i+1));timeOrLabel=i>1?this._parseTimeOrLabel(timeOrLabel.substr(0,i-1),0,appendIfAbsent):this.duration()}else if(timeOrLabel==null){timeOrLabel=this.duration()}return Number(timeOrLabel)+offsetOrLabel};p.seek=function(position,suppressEvents){return this.totalTime(typeof position==="number"?position:this._parseTimeOrLabel(position),suppressEvents!==false)};p.stop=function(){return this.paused(true)};p.gotoAndPlay=function(position,suppressEvents){return this.play(position,suppressEvents)};p.gotoAndStop=function(position,suppressEvents){return this.pause(position,suppressEvents)};p.render=function(time,suppressEvents,force){if(this._gc){this._enabled(true,false)}var totalDur=!this._dirty?this._totalDuration:this.totalDuration(),prevTime=this._time,prevStart=this._startTime,prevTimeScale=this._timeScale,prevPaused=this._paused,tween,isComplete,next,callback,internalForce,pauseTween;if(time>=totalDur){this._totalTime=this._time=totalDur;if(!this._reversed)if(!this._hasPausedChild()){isComplete=true;callback="onComplete";internalForce=!!this._timeline.autoRemoveChildren;if(this._duration===0)if(time===0||this._rawPrevTime<0||this._rawPrevTime===_tinyNum)if(this._rawPrevTime!==time&&this._first){internalForce=true;if(this._rawPrevTime>_tinyNum){callback="onReverseComplete"}}}this._rawPrevTime=this._duration||!suppressEvents||time||this._rawPrevTime===time?time:_tinyNum;time=totalDur+1e-4}else if(time<1e-7){this._totalTime=this._time=0;if(prevTime!==0||this._duration===0&&this._rawPrevTime!==_tinyNum&&(this._rawPrevTime>0||time<0&&this._rawPrevTime>=0)){callback="onReverseComplete";isComplete=this._reversed}if(time<0){this._active=false;if(this._timeline.autoRemoveChildren&&this._reversed){internalForce=isComplete=true;callback="onReverseComplete"}else if(this._rawPrevTime>=0&&this._first){internalForce=true}this._rawPrevTime=time}else{this._rawPrevTime=this._duration||!suppressEvents||time||this._rawPrevTime===time?time:_tinyNum;if(time===0&&isComplete){tween=this._first;while(tween&&tween._startTime===0){if(!tween._duration){isComplete=false}tween=tween._next}}time=0;if(!this._initted){internalForce=true}}}else{if(this._hasPause&&!this._forcingPlayhead&&!suppressEvents){if(time>=prevTime){tween=this._first;while(tween&&tween._startTime<=time&&!pauseTween){if(!tween._duration)if(tween.data==="isPause"&&!tween.ratio&&!(tween._startTime===0&&this._rawPrevTime===0)){pauseTween=tween}tween=tween._next}}else{tween=this._last;while(tween&&tween._startTime>=time&&!pauseTween){if(!tween._duration)if(tween.data==="isPause"&&tween._rawPrevTime>0){pauseTween=tween}tween=tween._prev}}if(pauseTween){this._time=time=pauseTween._startTime;this._totalTime=time+this._cycle*(this._totalDuration+this._repeatDelay);

    }}this._totalTime=this._time=this._rawPrevTime=time}if((this._time===prevTime||!this._first)&&!force&&!internalForce&&!pauseTween){return}else if(!this._initted){this._initted=true}if(!this._active)if(!this._paused&&this._time!==prevTime&&time>0){this._active=true}if(prevTime===0)if(this.vars.onStart)if(this._time!==0)if(!suppressEvents){this._callback("onStart")}if(this._time>=prevTime){tween=this._first;while(tween){next=tween._next;if(this._paused&&!prevPaused){break}else if(tween._active||tween._startTime<=this._time&&!tween._paused&&!tween._gc){if(pauseTween===tween){this.pause()}if(!tween._reversed){tween.render((time-tween._startTime)*tween._timeScale,suppressEvents,force)}else{tween.render((!tween._dirty?tween._totalDuration:tween.totalDuration())-(time-tween._startTime)*tween._timeScale,suppressEvents,force)}}tween=next}}else{tween=this._last;while(tween){next=tween._prev;if(this._paused&&!prevPaused){break}else if(tween._active||tween._startTime<=prevTime&&!tween._paused&&!tween._gc){if(pauseTween===tween){pauseTween=tween._prev;while(pauseTween&&pauseTween.endTime()>this._time){pauseTween.render(pauseTween._reversed?pauseTween.totalDuration()-(time-pauseTween._startTime)*pauseTween._timeScale:(time-pauseTween._startTime)*pauseTween._timeScale,suppressEvents,force);pauseTween=pauseTween._prev}pauseTween=null;this.pause()}if(!tween._reversed){tween.render((time-tween._startTime)*tween._timeScale,suppressEvents,force)}else{tween.render((!tween._dirty?tween._totalDuration:tween.totalDuration())-(time-tween._startTime)*tween._timeScale,suppressEvents,force)}}tween=next}}if(this._onUpdate)if(!suppressEvents){if(_lazyTweens.length){_lazyRender()}this._callback("onUpdate")}if(callback)if(!this._gc)if(prevStart===this._startTime||prevTimeScale!==this._timeScale)if(this._time===0||totalDur>=this.totalDuration()){if(isComplete){if(_lazyTweens.length){_lazyRender()}if(this._timeline.autoRemoveChildren){this._enabled(false,false)}this._active=false}if(!suppressEvents&&this.vars[callback]){this._callback(callback)}}};p._hasPausedChild=function(){var tween=this._first;while(tween){if(tween._paused||tween instanceof TimelineLite&&tween._hasPausedChild()){return true}tween=tween._next}return false};p.getChildren=function(nested,tweens,timelines,ignoreBeforeTime){ignoreBeforeTime=ignoreBeforeTime||-9999999999;var a=[],tween=this._first,cnt=0;while(tween){if(tween._startTime<ignoreBeforeTime){}else if(tween instanceof TweenLite){if(tweens!==false){a[cnt++]=tween}}else{if(timelines!==false){a[cnt++]=tween}if(nested!==false){a=a.concat(tween.getChildren(true,tweens,timelines));cnt=a.length}}tween=tween._next}return a};p.getTweensOf=function(target,nested){var disabled=this._gc,a=[],cnt=0,tweens,i;if(disabled){this._enabled(true,true)}tweens=TweenLite.getTweensOf(target);i=tweens.length;while(--i>-1){if(tweens[i].timeline===this||nested&&this._contains(tweens[i])){a[cnt++]=tweens[i]}}if(disabled){this._enabled(false,true)}return a};p.recent=function(){return this._recent};p._contains=function(tween){var tl=tween.timeline;while(tl){if(tl===this){return true}tl=tl.timeline}return false};p.shiftChildren=function(amount,adjustLabels,ignoreBeforeTime){ignoreBeforeTime=ignoreBeforeTime||0;var tween=this._first,labels=this._labels,p;while(tween){if(tween._startTime>=ignoreBeforeTime){tween._startTime+=amount}tween=tween._next}if(adjustLabels){for(p in labels){if(labels[p]>=ignoreBeforeTime){labels[p]+=amount}}}return this._uncache(true)};p._kill=function(vars,target){if(!vars&&!target){return this._enabled(false,false)}var tweens=!target?this.getChildren(true,true,false):this.getTweensOf(target),i=tweens.length,changed=false;while(--i>-1){if(tweens[i]._kill(vars,target)){changed=true}}return changed};p.clear=function(labels){var tweens=this.getChildren(false,true,true),i=tweens.length;this._time=this._totalTime=0;while(--i>-1){tweens[i]._enabled(false,false)}if(labels!==false){this._labels={}}return this._uncache(true)};p.invalidate=function(){var tween=this._first;while(tween){tween.invalidate();tween=tween._next}return Animation.prototype.invalidate.call(this)};p._enabled=function(enabled,ignoreTimeline){if(enabled===this._gc){var tween=this._first;while(tween){tween._enabled(enabled,true);tween=tween._next}}return SimpleTimeline.prototype._enabled.call(this,enabled,ignoreTimeline)};p.totalTime=function(time,suppressEvents,uncapped){this._forcingPlayhead=true;var val=Animation.prototype.totalTime.apply(this,arguments);this._forcingPlayhead=false;return val};p.duration=function(value){if(!arguments.length){if(this._dirty){this.totalDuration()}return this._duration}if(this.duration()!==0&&value!==0){this.timeScale(this._duration/value)}return this};p.totalDuration=function(value){if(!arguments.length){if(this._dirty){var max=0,tween=this._last,prevStart=999999999999,prev,end;while(tween){prev=tween._prev;if(tween._dirty){tween.totalDuration()}if(tween._startTime>prevStart&&this._sortChildren&&!tween._paused){this.add(tween,tween._startTime-tween._delay)}else{prevStart=tween._startTime}if(tween._startTime<0&&!tween._paused){max-=tween._startTime;if(this._timeline.smoothChildTiming){this._startTime+=tween._startTime/this._timeScale}this.shiftChildren(-tween._startTime,false,-9999999999);prevStart=0}end=tween._startTime+tween._totalDuration/tween._timeScale;if(end>max){max=end}tween=prev}this._duration=this._totalDuration=max;this._dirty=false}return this._totalDuration}if(this.totalDuration()!==0)if(value!==0){this.timeScale(this._totalDuration/value)}return this};p.paused=function(value){if(!value){var tween=this._first,time=this._time;while(tween){if(tween._startTime===time&&tween.data==="isPause"){tween._rawPrevTime=0}tween=tween._next}}return Animation.prototype.paused.apply(this,arguments)};p.usesFrames=function(){var tl=this._timeline;while(tl._timeline){tl=tl._timeline}return tl===Animation._rootFramesTimeline};p.rawTime=function(){return this._paused?this._totalTime:(this._timeline.rawTime()-this._startTime)*this._timeScale};return TimelineLite},true);_gsScope._gsDefine("TimelineMax",["TimelineLite","TweenLite","easing.Ease"],function(TimelineLite,TweenLite,Ease){var TimelineMax=function(vars){TimelineLite.call(this,vars);this._repeat=this.vars.repeat||0;this._repeatDelay=this.vars.repeatDelay||0;this._cycle=0;this._yoyo=this.vars.yoyo===true;this._dirty=true},_tinyNum=1e-10,TweenLiteInternals=TweenLite._internals,_lazyTweens=TweenLiteInternals.lazyTweens,_lazyRender=TweenLiteInternals.lazyRender,_easeNone=new Ease(null,null,1,0),p=TimelineMax.prototype=new TimelineLite;p.constructor=TimelineMax;p.kill()._gc=false;TimelineMax.version="1.18.0";p.invalidate=function(){this._yoyo=this.vars.yoyo===true;this._repeat=this.vars.repeat||0;this._repeatDelay=this.vars.repeatDelay||0;this._uncache(true);return TimelineLite.prototype.invalidate.call(this)};p.addCallback=function(callback,position,params,scope){return this.add(TweenLite.delayedCall(0,callback,params,scope),position)};p.removeCallback=function(callback,position){if(callback){if(position==null){this._kill(null,callback)}else{var a=this.getTweensOf(callback,false),i=a.length,time=this._parseTimeOrLabel(position);while(--i>-1){if(a[i]._startTime===time){a[i]._enabled(false,false)}}}}return this};p.removePause=function(position){return this.removeCallback(TimelineLite._internals.pauseCallback,position)};p.tweenTo=function(position,vars){vars=vars||{};var copy={ease:_easeNone,useFrames:this.usesFrames(),immediateRender:false},duration,p,t;for(p in vars){copy[p]=vars[p]}copy.time=this._parseTimeOrLabel(position);duration=Math.abs(Number(copy.time)-this._time)/this._timeScale||.001;t=new TweenLite(this,duration,copy);copy.onStart=function(){t.target.paused(true);if(t.vars.time!==t.target.time()&&duration===t.duration()){t.duration(Math.abs(t.vars.time-t.target.time())/t.target._timeScale)}if(vars.onStart){t._callback("onStart")}};return t};p.tweenFromTo=function(fromPosition,toPosition,vars){vars=vars||{};fromPosition=this._parseTimeOrLabel(fromPosition);vars.startAt={onComplete:this.seek,onCompleteParams:[fromPosition],callbackScope:this};vars.immediateRender=vars.immediateRender!==false;var t=this.tweenTo(toPosition,vars);return t.duration(Math.abs(t.vars.time-fromPosition)/this._timeScale||.001)};p.render=function(time,suppressEvents,force){if(this._gc){this._enabled(true,false)}var totalDur=!this._dirty?this._totalDuration:this.totalDuration(),dur=this._duration,prevTime=this._time,prevTotalTime=this._totalTime,prevStart=this._startTime,prevTimeScale=this._timeScale,prevRawPrevTime=this._rawPrevTime,prevPaused=this._paused,prevCycle=this._cycle,tween,isComplete,next,callback,internalForce,cycleDuration,pauseTween;if(time>=totalDur){if(!this._locked){this._totalTime=totalDur;this._cycle=this._repeat}if(!this._reversed)if(!this._hasPausedChild()){isComplete=true;callback="onComplete";internalForce=!!this._timeline.autoRemoveChildren;if(this._duration===0)if(time===0||prevRawPrevTime<0||prevRawPrevTime===_tinyNum)if(prevRawPrevTime!==time&&this._first){internalForce=true;if(prevRawPrevTime>_tinyNum){callback="onReverseComplete"}}}this._rawPrevTime=this._duration||!suppressEvents||time||this._rawPrevTime===time?time:_tinyNum;if(this._yoyo&&(this._cycle&1)!==0){this._time=time=0}else{this._time=dur;time=dur+1e-4}}else if(time<1e-7){if(!this._locked){this._totalTime=this._cycle=0}this._time=0;if(prevTime!==0||dur===0&&prevRawPrevTime!==_tinyNum&&(prevRawPrevTime>0||time<0&&prevRawPrevTime>=0)&&!this._locked){callback="onReverseComplete";isComplete=this._reversed}if(time<0){this._active=false;if(this._timeline.autoRemoveChildren&&this._reversed){internalForce=isComplete=true;callback="onReverseComplete"}else if(prevRawPrevTime>=0&&this._first){internalForce=true}this._rawPrevTime=time}else{this._rawPrevTime=dur||!suppressEvents||time||this._rawPrevTime===time?time:_tinyNum;if(time===0&&isComplete){tween=this._first;while(tween&&tween._startTime===0){if(!tween._duration){isComplete=false}tween=tween._next}}time=0;if(!this._initted){internalForce=true}}}else{if(dur===0&&prevRawPrevTime<0){internalForce=true}this._time=this._rawPrevTime=time;if(!this._locked){this._totalTime=time;if(this._repeat!==0){cycleDuration=dur+this._repeatDelay;this._cycle=this._totalTime/cycleDuration>>0;if(this._cycle!==0)if(this._cycle===this._totalTime/cycleDuration){this._cycle--}this._time=this._totalTime-this._cycle*cycleDuration;if(this._yoyo)if((this._cycle&1)!==0){this._time=dur-this._time}if(this._time>dur){this._time=dur;time=dur+1e-4}else if(this._time<0){this._time=time=0}else{time=this._time}}}if(this._hasPause&&!this._forcingPlayhead&&!suppressEvents){time=this._time;if(time>=prevTime){tween=this._first;while(tween&&tween._startTime<=time&&!pauseTween){if(!tween._duration)if(tween.data==="isPause"&&!tween.ratio&&!(tween._startTime===0&&this._rawPrevTime===0)){pauseTween=tween}tween=tween._next}}else{tween=this._last;while(tween&&tween._startTime>=time&&!pauseTween){if(!tween._duration)if(tween.data==="isPause"&&tween._rawPrevTime>0){pauseTween=tween}tween=tween._prev}}if(pauseTween){this._time=time=pauseTween._startTime;this._totalTime=time+this._cycle*(this._totalDuration+this._repeatDelay)}}}if(this._cycle!==prevCycle)if(!this._locked){var backwards=this._yoyo&&(prevCycle&1)!==0,wrap=backwards===(this._yoyo&&(this._cycle&1)!==0),recTotalTime=this._totalTime,recCycle=this._cycle,recRawPrevTime=this._rawPrevTime,recTime=this._time;this._totalTime=prevCycle*dur;if(this._cycle<prevCycle){backwards=!backwards}else{this._totalTime+=dur}this._time=prevTime;this._rawPrevTime=dur===0?prevRawPrevTime-1e-4:prevRawPrevTime;this._cycle=prevCycle;this._locked=true;prevTime=backwards?0:dur;this.render(prevTime,suppressEvents,dur===0);if(!suppressEvents)if(!this._gc){if(this.vars.onRepeat){this._callback("onRepeat")}}if(wrap){prevTime=backwards?dur+1e-4:-1e-4;this.render(prevTime,true,false)}this._locked=false;if(this._paused&&!prevPaused){return}this._time=recTime;this._totalTime=recTotalTime;this._cycle=recCycle;this._rawPrevTime=recRawPrevTime}if((this._time===prevTime||!this._first)&&!force&&!internalForce&&!pauseTween){if(prevTotalTime!==this._totalTime)if(this._onUpdate)if(!suppressEvents){this._callback("onUpdate")}return}else if(!this._initted){this._initted=true}if(!this._active)if(!this._paused&&this._totalTime!==prevTotalTime&&time>0){this._active=true}if(prevTotalTime===0)if(this.vars.onStart)if(this._totalTime!==0)if(!suppressEvents){this._callback("onStart")}if(this._time>=prevTime){tween=this._first;while(tween){next=tween._next;if(this._paused&&!prevPaused){break}else if(tween._active||tween._startTime<=this._time&&!tween._paused&&!tween._gc){if(pauseTween===tween){this.pause()}if(!tween._reversed){tween.render((time-tween._startTime)*tween._timeScale,suppressEvents,force)}else{tween.render((!tween._dirty?tween._totalDuration:tween.totalDuration())-(time-tween._startTime)*tween._timeScale,suppressEvents,force)}}tween=next}}else{tween=this._last;while(tween){next=tween._prev;if(this._paused&&!prevPaused){break}else if(tween._active||tween._startTime<=prevTime&&!tween._paused&&!tween._gc){if(pauseTween===tween){pauseTween=tween._prev;while(pauseTween&&pauseTween.endTime()>this._time){pauseTween.render(pauseTween._reversed?pauseTween.totalDuration()-(time-pauseTween._startTime)*pauseTween._timeScale:(time-pauseTween._startTime)*pauseTween._timeScale,suppressEvents,force);pauseTween=pauseTween._prev}pauseTween=null;this.pause()}if(!tween._reversed){tween.render((time-tween._startTime)*tween._timeScale,suppressEvents,force)}else{tween.render((!tween._dirty?tween._totalDuration:tween.totalDuration())-(time-tween._startTime)*tween._timeScale,suppressEvents,force)}}tween=next}}if(this._onUpdate)if(!suppressEvents){if(_lazyTweens.length){_lazyRender()}this._callback("onUpdate")}if(callback)if(!this._locked)if(!this._gc)if(prevStart===this._startTime||prevTimeScale!==this._timeScale)if(this._time===0||totalDur>=this.totalDuration()){if(isComplete){if(_lazyTweens.length){_lazyRender()}if(this._timeline.autoRemoveChildren){this._enabled(false,false)}this._active=false}if(!suppressEvents&&this.vars[callback]){this._callback(callback)}}};p.getActive=function(nested,tweens,timelines){if(nested==null){nested=true}if(tweens==null){tweens=true}if(timelines==null){timelines=false}var a=[],all=this.getChildren(nested,tweens,timelines),cnt=0,l=all.length,i,tween;for(i=0;i<l;i++){tween=all[i];if(tween.isActive()){a[cnt++]=tween}}return a};p.getLabelAfter=function(time){if(!time)if(time!==0){time=this._time}var labels=this.getLabelsArray(),l=labels.length,i;for(i=0;i<l;i++){if(labels[i].time>time){return labels[i].name}}return null};p.getLabelBefore=function(time){if(time==null){time=this._time}var labels=this.getLabelsArray(),i=labels.length;while(--i>-1){if(labels[i].time<time){return labels[i].name}}return null};p.getLabelsArray=function(){var a=[],cnt=0,p;for(p in this._labels){a[cnt++]={time:this._labels[p],name:p}}a.sort(function(a,b){return a.time-b.time});return a};p.progress=function(value,suppressEvents){return!arguments.length?this._time/this.duration():this.totalTime(this.duration()*(this._yoyo&&(this._cycle&1)!==0?1-value:value)+this._cycle*(this._duration+this._repeatDelay),suppressEvents)};p.totalProgress=function(value,suppressEvents){return!arguments.length?this._totalTime/this.totalDuration():this.totalTime(this.totalDuration()*value,suppressEvents)};p.totalDuration=function(value){if(!arguments.length){if(this._dirty){TimelineLite.prototype.totalDuration.call(this);this._totalDuration=this._repeat===-1?999999999999:this._duration*(this._repeat+1)+this._repeatDelay*this._repeat}return this._totalDuration}return this._repeat===-1?this:this.duration((value-this._repeat*this._repeatDelay)/(this._repeat+1))};p.time=function(value,suppressEvents){if(!arguments.length){return this._time}if(this._dirty){this.totalDuration()}if(value>this._duration){value=this._duration}if(this._yoyo&&(this._cycle&1)!==0){value=this._duration-value+this._cycle*(this._duration+this._repeatDelay)}else if(this._repeat!==0){value+=this._cycle*(this._duration+this._repeatDelay)}return this.totalTime(value,suppressEvents)};p.repeat=function(value){if(!arguments.length){return this._repeat}this._repeat=value;return this._uncache(true)};p.repeatDelay=function(value){if(!arguments.length){return this._repeatDelay}this._repeatDelay=value;return this._uncache(true)};p.yoyo=function(value){if(!arguments.length){return this._yoyo}this._yoyo=value;return this};p.currentLabel=function(value){if(!arguments.length){return this.getLabelBefore(this._time+1e-8)}return this.seek(value,true)};return TimelineMax},true);(function(){var _RAD2DEG=180/Math.PI,_r1=[],_r2=[],_r3=[],_corProps={},_globals=_gsScope._gsDefine.globals,Segment=function(a,b,c,d){this.a=a;this.b=b;this.c=c;this.d=d;this.da=d-a;this.ca=c-a;this.ba=b-a},_correlate=",x,y,z,left,top,right,bottom,marginTop,marginLeft,marginRight,marginBottom,paddingLeft,paddingTop,paddingRight,paddingBottom,backgroundPosition,backgroundPosition_y,",cubicToQuadratic=function(a,b,c,d){var q1={a:a},q2={},q3={},q4={c:d},mab=(a+b)/2,mbc=(b+c)/2,mcd=(c+d)/2,mabc=(mab+mbc)/2,mbcd=(mbc+mcd)/2,m8=(mbcd-mabc)/8;q1.b=mab+(a-mab)/4;q2.b=mabc+m8;q1.c=q2.a=(q1.b+q2.b)/2;q2.c=q3.a=(mabc+mbcd)/2;q3.b=mbcd-m8;q4.b=mcd+(d-mcd)/4;q3.c=q4.a=(q3.b+q4.b)/2;return[q1,q2,q3,q4]},_calculateControlPoints=function(a,curviness,quad,basic,correlate){var l=a.length-1,ii=0,cp1=a[0].a,i,p1,p2,p3,seg,m1,m2,mm,cp2,qb,r1,r2,tl;for(i=0;i<l;i++){seg=a[ii];p1=seg.a;p2=seg.d;p3=a[ii+1].d;if(correlate){r1=_r1[i];r2=_r2[i];tl=(r2+r1)*curviness*.25/(basic?.5:_r3[i]||.5);m1=p2-(p2-p1)*(basic?curviness*.5:r1!==0?tl/r1:0);m2=p2+(p3-p2)*(basic?curviness*.5:r2!==0?tl/r2:0);mm=p2-(m1+((m2-m1)*(r1*3/(r1+r2)+.5)/4||0))}else{m1=p2-(p2-p1)*curviness*.5;m2=p2+(p3-p2)*curviness*.5;mm=p2-(m1+m2)/2}m1+=mm;m2+=mm;seg.c=cp2=m1;if(i!==0){seg.b=cp1}else{seg.b=cp1=seg.a+(seg.c-seg.a)*.6}seg.da=p2-p1;seg.ca=cp2-p1;seg.ba=cp1-p1;if(quad){qb=cubicToQuadratic(p1,cp1,cp2,p2);a.splice(ii,1,qb[0],qb[1],qb[2],qb[3]);ii+=4}else{ii++}cp1=m2}seg=a[ii];seg.b=cp1;seg.c=cp1+(seg.d-cp1)*.4;seg.da=seg.d-seg.a;seg.ca=seg.c-seg.a;seg.ba=cp1-seg.a;if(quad){qb=cubicToQuadratic(seg.a,cp1,seg.c,seg.d);a.splice(ii,1,qb[0],qb[1],qb[2],qb[3])}},_parseAnchors=function(values,p,correlate,prepend){var a=[],l,i,p1,p2,p3,tmp;if(prepend){values=[prepend].concat(values);i=values.length;while(--i>-1){if(typeof(tmp=values[i][p])==="string")if(tmp.charAt(1)==="="){values[i][p]=prepend[p]+Number(tmp.charAt(0)+tmp.substr(2))}}}l=values.length-2;if(l<0){a[0]=new Segment(values[0][p],0,0,values[l<-1?0:1][p]);return a}for(i=0;i<l;i++){p1=values[i][p];p2=values[i+1][p];a[i]=new Segment(p1,0,0,p2);if(correlate){p3=values[i+2][p];_r1[i]=(_r1[i]||0)+(p2-p1)*(p2-p1);_r2[i]=(_r2[i]||0)+(p3-p2)*(p3-p2)}}a[i]=new Segment(values[i][p],0,0,values[i+1][p]);return a},bezierThrough=function(values,curviness,quadratic,basic,correlate,prepend){var obj={},props=[],first=prepend||values[0],i,p,a,j,r,l,seamless,last;correlate=typeof correlate==="string"?","+correlate+",":_correlate;if(curviness==null){curviness=1}for(p in values[0]){props.push(p)}if(values.length>1){last=values[values.length-1];seamless=true;i=props.length;while(--i>-1){p=props[i];if(Math.abs(first[p]-last[p])>.05){seamless=false;break}}if(seamless){values=values.concat();if(prepend){values.unshift(prepend)}values.push(values[1]);prepend=values[values.length-3]}}_r1.length=_r2.length=_r3.length=0;i=props.length;while(--i>-1){p=props[i];_corProps[p]=correlate.indexOf(","+p+",")!==-1;obj[p]=_parseAnchors(values,p,_corProps[p],prepend)}i=_r1.length;while(--i>-1){_r1[i]=Math.sqrt(_r1[i]);_r2[i]=Math.sqrt(_r2[i])}if(!basic){i=props.length;while(--i>-1){if(_corProps[p]){a=obj[props[i]];l=a.length-1;for(j=0;j<l;j++){r=a[j+1].da/_r2[j]+a[j].da/_r1[j];_r3[j]=(_r3[j]||0)+r*r}}}i=_r3.length;while(--i>-1){_r3[i]=Math.sqrt(_r3[i])}}i=props.length;j=quadratic?4:1;while(--i>-1){p=props[i];a=obj[p];_calculateControlPoints(a,curviness,quadratic,basic,_corProps[p]);if(seamless){a.splice(0,j);a.splice(a.length-j,j)}}return obj},_parseBezierData=function(values,type,prepend){type=type||"soft";var obj={},inc=type==="cubic"?3:2,soft=type==="soft",props=[],a,b,c,d,cur,i,j,l,p,cnt,tmp;if(soft&&prepend){values=[prepend].concat(values)}if(values==null||values.length<inc+1){throw"invalid Bezier data"}for(p in values[0]){props.push(p)}i=props.length;while(--i>-1){p=props[i];obj[p]=cur=[];cnt=0;l=values.length;for(j=0;j<l;j++){a=prepend==null?values[j][p]:typeof(tmp=values[j][p])==="string"&&tmp.charAt(1)==="="?prepend[p]+Number(tmp.charAt(0)+tmp.substr(2)):Number(tmp);if(soft)if(j>1)if(j<l-1){cur[cnt++]=(a+cur[cnt-2])/2}cur[cnt++]=a}l=cnt-inc+1;cnt=0;for(j=0;j<l;j+=inc){a=cur[j];b=cur[j+1];c=cur[j+2];d=inc===2?0:cur[j+3];cur[cnt++]=tmp=inc===3?new Segment(a,b,c,d):new Segment(a,(2*b+a)/3,(2*b+c)/3,c)}cur.length=cnt}return obj},_addCubicLengths=function(a,steps,resolution){var inc=1/resolution,j=a.length,d,d1,s,da,ca,ba,p,i,inv,bez,index;while(--j>-1){bez=a[j];s=bez.a;da=bez.d-s;ca=bez.c-s;ba=bez.b-s;d=d1=0;for(i=1;i<=resolution;i++){p=inc*i;inv=1-p;d=d1-(d1=(p*p*da+3*inv*(p*ca+inv*ba))*p);index=j*resolution+i-1;steps[index]=(steps[index]||0)+d*d}}},_parseLengthData=function(obj,resolution){resolution=resolution>>0||6;var a=[],lengths=[],d=0,total=0,threshold=resolution-1,segments=[],curLS=[],p,i,l,index;for(p in obj){_addCubicLengths(obj[p],a,resolution)}l=a.length;for(i=0;i<l;i++){d+=Math.sqrt(a[i]);index=i%resolution;curLS[index]=d;if(index===threshold){total+=d;index=i/resolution>>0;segments[index]=curLS;lengths[index]=total;d=0;curLS=[]}}return{length:total,lengths:lengths,segments:segments}},BezierPlugin=_gsScope._gsDefine.plugin({propName:"bezier",priority:-1,version:"1.3.4",API:2,global:true,init:function(target,vars,tween){this._target=target;if(vars instanceof Array){vars={values:vars}}this._func={};this._round={};this._props=[];this._timeRes=vars.timeResolution==null?6:parseInt(vars.timeResolution,10);var values=vars.values||[],first={},second=values[0],autoRotate=vars.autoRotate||tween.vars.orientToBezier,p,isFunc,i,j,prepend;this._autoRotate=autoRotate?autoRotate instanceof Array?autoRotate:[["x","y","rotation",autoRotate===true?0:Number(autoRotate)||0]]:null;for(p in second){this._props.push(p)}i=this._props.length;while(--i>-1){p=this._props[i];this._overwriteProps.push(p);isFunc=this._func[p]=typeof target[p]==="function";first[p]=!isFunc?parseFloat(target[p]):target[p.indexOf("set")||typeof target["get"+p.substr(3)]!=="function"?p:"get"+p.substr(3)]();if(!prepend)if(first[p]!==values[0][p]){prepend=first}}this._beziers=vars.type!=="cubic"&&vars.type!=="quadratic"&&vars.type!=="soft"?bezierThrough(values,isNaN(vars.curviness)?1:vars.curviness,false,vars.type==="thruBasic",vars.correlate,prepend):_parseBezierData(values,vars.type,first);this._segCount=this._beziers[p].length;if(this._timeRes){var ld=_parseLengthData(this._beziers,this._timeRes);this._length=ld.length;this._lengths=ld.lengths;this._segments=ld.segments;this._l1=this._li=this._s1=this._si=0;this._l2=this._lengths[0];this._curSeg=this._segments[0];this._s2=this._curSeg[0];this._prec=1/this._curSeg.length}if(autoRotate=this._autoRotate){this._initialRotations=[];if(!(autoRotate[0]instanceof Array)){this._autoRotate=autoRotate=[autoRotate]}i=autoRotate.length;while(--i>-1){for(j=0;j<3;j++){p=autoRotate[i][j];this._func[p]=typeof target[p]==="function"?target[p.indexOf("set")||typeof target["get"+p.substr(3)]!=="function"?p:"get"+p.substr(3)]:false}p=autoRotate[i][2];this._initialRotations[i]=this._func[p]?this._func[p].call(this._target):this._target[p]}}this._startRatio=tween.vars.runBackwards?1:0;return true},set:function(v){var segments=this._segCount,func=this._func,target=this._target,notStart=v!==this._startRatio,curIndex,inv,i,p,b,t,val,l,lengths,curSeg;if(!this._timeRes){curIndex=v<0?0:v>=1?segments-1:segments*v>>0;t=(v-curIndex*(1/segments))*segments}else{lengths=this._lengths;curSeg=this._curSeg;v*=this._length;i=this._li;if(v>this._l2&&i<segments-1){l=segments-1;while(i<l&&(this._l2=lengths[++i])<=v){}this._l1=lengths[i-1];this._li=i;this._curSeg=curSeg=this._segments[i];this._s2=curSeg[this._s1=this._si=0]}else if(v<this._l1&&i>0){while(i>0&&(this._l1=lengths[--i])>=v){}if(i===0&&v<this._l1){this._l1=0}else{i++}this._l2=lengths[i];this._li=i;this._curSeg=curSeg=this._segments[i];this._s1=curSeg[(this._si=curSeg.length-1)-1]||0;this._s2=curSeg[this._si]}curIndex=i;v-=this._l1;i=this._si;if(v>this._s2&&i<curSeg.length-1){l=curSeg.length-1;while(i<l&&(this._s2=curSeg[++i])<=v){}this._s1=curSeg[i-1];this._si=i}else if(v<this._s1&&i>0){while(i>0&&(this._s1=curSeg[--i])>=v){}if(i===0&&v<this._s1){this._s1=0}else{i++}this._s2=curSeg[i];this._si=i}t=(i+(v-this._s1)/(this._s2-this._s1))*this._prec}inv=1-t;i=this._props.length;while(--i>-1){p=this._props[i];b=this._beziers[p][curIndex];val=(t*t*b.da+3*inv*(t*b.ca+inv*b.ba))*t+b.a;if(this._round[p]){val=Math.round(val)}if(func[p]){target[p](val)}else{target[p]=val}}if(this._autoRotate){var ar=this._autoRotate,b2,x1,y1,x2,y2,add,conv;i=ar.length;while(--i>-1){p=ar[i][2];add=ar[i][3]||0;conv=ar[i][4]===true?1:_RAD2DEG;b=this._beziers[ar[i][0]];b2=this._beziers[ar[i][1]];if(b&&b2){b=b[curIndex];b2=b2[curIndex];x1=b.a+(b.b-b.a)*t;x2=b.b+(b.c-b.b)*t;x1+=(x2-x1)*t;x2+=(b.c+(b.d-b.c)*t-x2)*t;y1=b2.a+(b2.b-b2.a)*t;y2=b2.b+(b2.c-b2.b)*t;y1+=(y2-y1)*t;y2+=(b2.c+(b2.d-b2.c)*t-y2)*t;val=notStart?Math.atan2(y2-y1,x2-x1)*conv+add:this._initialRotations[i];if(func[p]){target[p](val)}else{target[p]=val}}}}}}),p=BezierPlugin.prototype;BezierPlugin.bezierThrough=bezierThrough;BezierPlugin.cubicToQuadratic=cubicToQuadratic;BezierPlugin._autoCSS=true;BezierPlugin.quadraticToCubic=function(a,b,c){return new Segment(a,(2*b+a)/3,(2*b+c)/3,c)};BezierPlugin._cssRegister=function(){var CSSPlugin=_globals.CSSPlugin;if(!CSSPlugin){return}var _internals=CSSPlugin._internals,_parseToProxy=_internals._parseToProxy,_setPluginRatio=_internals._setPluginRatio,CSSPropTween=_internals.CSSPropTween;_internals._registerComplexSpecialProp("bezier",{parser:function(t,e,prop,cssp,pt,plugin){if(e instanceof Array){e={values:e}}plugin=new BezierPlugin;var values=e.values,l=values.length-1,pluginValues=[],v={},i,p,data;if(l<0){return pt}for(i=0;i<=l;i++){data=_parseToProxy(t,values[i],cssp,pt,plugin,l!==i);pluginValues[i]=data.end}for(p in e){v[p]=e[p]}v.values=pluginValues;pt=new CSSPropTween(t,"bezier",0,0,data.pt,2);pt.data=data;pt.plugin=plugin;pt.setRatio=_setPluginRatio;if(v.autoRotate===0){v.autoRotate=true}if(v.autoRotate&&!(v.autoRotate instanceof Array)){i=v.autoRotate===true?0:Number(v.autoRotate);v.autoRotate=data.end.left!=null?[["left","top","rotation",i,false]]:data.end.x!=null?[["x","y","rotation",i,false]]:false}if(v.autoRotate){if(!cssp._transform){cssp._enableTransforms(false)}data.autoRotate=cssp._target._gsTransform}plugin._onInitTween(data.proxy,v,cssp._tween);return pt}})};p._roundProps=function(lookup,value){var op=this._overwriteProps,i=op.length;while(--i>-1){if(lookup[op[i]]||lookup.bezier||lookup.bezierThrough){this._round[op[i]]=value}}};p._kill=function(lookup){var a=this._props,p,i;for(p in this._beziers){if(p in lookup){delete this._beziers[p];delete this._func[p];i=a.length;while(--i>-1){if(a[i]===p){a.splice(i,1)}}}}return this._super._kill.call(this,lookup)}})();_gsScope._gsDefine("plugins.CSSPlugin",["plugins.TweenPlugin","TweenLite"],function(TweenPlugin,TweenLite){var CSSPlugin=function(){TweenPlugin.call(this,"css");this._overwriteProps.length=0;this.setRatio=CSSPlugin.prototype.setRatio},_globals=_gsScope._gsDefine.globals,_hasPriority,_suffixMap,_cs,_overwriteProps,_specialProps={},p=CSSPlugin.prototype=new TweenPlugin("css");p.constructor=CSSPlugin;CSSPlugin.version="1.18.0";CSSPlugin.API=2;CSSPlugin.defaultTransformPerspective=0;CSSPlugin.defaultSkewType="compensated";CSSPlugin.defaultSmoothOrigin=true;p="px";CSSPlugin.suffixMap={top:p,right:p,bottom:p,left:p,width:p,height:p,fontSize:p,padding:p,margin:p,perspective:p,lineHeight:""};var _numExp=/(?:\d|\-\d|\.\d|\-\.\d)+/g,_relNumExp=/(?:\d|\-\d|\.\d|\-\.\d|\+=\d|\-=\d|\+=.\d|\-=\.\d)+/g,_valuesExp=/(?:\+=|\-=|\-|\b)[\d\-\.]+[a-zA-Z0-9]*(?:%|\b)/gi,_NaNExp=/(?![+-]?\d*\.?\d+|[+-]|e[+-]\d+)[^0-9]/g,_suffixExp=/(?:\d|\-|\+|=|#|\.)*/g,_opacityExp=/opacity *= *([^)]*)/i,_opacityValExp=/opacity:([^;]*)/i,_alphaFilterExp=/alpha\(opacity *=.+?\)/i,_rgbhslExp=/^(rgb|hsl)/,_capsExp=/([A-Z])/g,_camelExp=/-([a-z])/gi,_urlExp=/(^(?:url\(\"|url\())|(?:(\"\))$|\)$)/gi,_camelFunc=function(s,g){return g.toUpperCase()},_horizExp=/(?:Left|Right|Width)/i,_ieGetMatrixExp=/(M11|M12|M21|M22)=[\d\-\.e]+/gi,_ieSetMatrixExp=/progid\:DXImageTransform\.Microsoft\.Matrix\(.+?\)/i,_commasOutsideParenExp=/,(?=[^\)]*(?:\(|$))/gi,_DEG2RAD=Math.PI/180,_RAD2DEG=180/Math.PI,_forcePT={},_doc=document,_createElement=function(type){return _doc.createElementNS?_doc.createElementNS("http://www.w3.org/1999/xhtml",type):_doc.createElement(type)},_tempDiv=_createElement("div"),_tempImg=_createElement("img"),_internals=CSSPlugin._internals={_specialProps:_specialProps},_agent=navigator.userAgent,_autoRound,_reqSafariFix,_isSafari,_isFirefox,_isSafariLT6,_ieVers,_supportsOpacity=function(){var i=_agent.indexOf("Android"),a=_createElement("a");_isSafari=_agent.indexOf("Safari")!==-1&&_agent.indexOf("Chrome")===-1&&(i===-1||Number(_agent.substr(i+8,1))>3);_isSafariLT6=_isSafari&&Number(_agent.substr(_agent.indexOf("Version/")+8,1))<6;_isFirefox=_agent.indexOf("Firefox")!==-1;if(/MSIE ([0-9]{1,}[\.0-9]{0,})/.exec(_agent)||/Trident\/.*rv:([0-9]{1,}[\.0-9]{0,})/.exec(_agent)){_ieVers=parseFloat(RegExp.$1)}if(!a){return false}a.style.cssText="top:1px;opacity:.55;";return/^0.55/.test(a.style.opacity)}(),_getIEOpacity=function(v){return _opacityExp.test(typeof v==="string"?v:(v.currentStyle?v.currentStyle.filter:v.style.filter)||"")?parseFloat(RegExp.$1)/100:1},_log=function(s){if(window.console){console.log(s)}},_prefixCSS="",_prefix="",_checkPropPrefix=function(p,e){e=e||_tempDiv;var s=e.style,a,i;if(s[p]!==undefined){return p}p=p.charAt(0).toUpperCase()+p.substr(1);a=["O","Moz","ms","Ms","Webkit"];i=5;while(--i>-1&&s[a[i]+p]===undefined){}if(i>=0){_prefix=i===3?"ms":a[i];_prefixCSS="-"+_prefix.toLowerCase()+"-";return _prefix+p}return null},_getComputedStyle=_doc.defaultView?_doc.defaultView.getComputedStyle:function(){},_getStyle=CSSPlugin.getStyle=function(t,p,cs,calc,dflt){var rv;if(!_supportsOpacity)if(p==="opacity"){return _getIEOpacity(t)}if(!calc&&t.style[p]){rv=t.style[p]}else if(cs=cs||_getComputedStyle(t)){rv=cs[p]||cs.getPropertyValue(p)||cs.getPropertyValue(p.replace(_capsExp,"-$1").toLowerCase())}else if(t.currentStyle){rv=t.currentStyle[p]}return dflt!=null&&(!rv||rv==="none"||rv==="auto"||rv==="auto auto")?dflt:rv},_convertToPixels=_internals.convertToPixels=function(t,p,v,sfx,recurse){if(sfx==="px"||!sfx){return v}if(sfx==="auto"||!v){return 0}var horiz=_horizExp.test(p),node=t,style=_tempDiv.style,neg=v<0,pix,cache,time;if(neg){v=-v}if(sfx==="%"&&p.indexOf("border")!==-1){pix=v/100*(horiz?t.clientWidth:t.clientHeight)}else{style.cssText="border:0 solid red;position:"+_getStyle(t,"position")+";line-height:0;";if(sfx==="%"||!node.appendChild||sfx.charAt(0)==="v"||sfx==="rem"){node=t.parentNode||_doc.body;cache=node._gsCache;time=TweenLite.ticker.frame;if(cache&&horiz&&cache.time===time){return cache.width*v/100}style[horiz?"width":"height"]=v+sfx}else{style[horiz?"borderLeftWidth":"borderTopWidth"]=v+sfx}node.appendChild(_tempDiv);pix=parseFloat(_tempDiv[horiz?"offsetWidth":"offsetHeight"]);node.removeChild(_tempDiv);if(horiz&&sfx==="%"&&CSSPlugin.cacheWidths!==false){cache=node._gsCache=node._gsCache||{};cache.time=time;cache.width=pix/v*100}if(pix===0&&!recurse){pix=_convertToPixels(t,p,v,sfx,true)}}return neg?-pix:pix},_calculateOffset=_internals.calculateOffset=function(t,p,cs){if(_getStyle(t,"position",cs)!=="absolute"){
        return 0}var dim=p==="left"?"Left":"Top",v=_getStyle(t,"margin"+dim,cs);return t["offset"+dim]-(_convertToPixels(t,p,parseFloat(v),v.replace(_suffixExp,""))||0)},_getAllStyles=function(t,cs){var s={},i,tr,p;if(cs=cs||_getComputedStyle(t,null)){if(i=cs.length){while(--i>-1){p=cs[i];if(p.indexOf("-transform")===-1||_transformPropCSS===p){s[p.replace(_camelExp,_camelFunc)]=cs.getPropertyValue(p)}}}else{for(i in cs){if(i.indexOf("Transform")===-1||_transformProp===i){s[i]=cs[i]}}}}else if(cs=t.currentStyle||t.style){for(i in cs){if(typeof i==="string"&&s[i]===undefined){s[i.replace(_camelExp,_camelFunc)]=cs[i]}}}if(!_supportsOpacity){s.opacity=_getIEOpacity(t)}tr=_getTransform(t,cs,false);s.rotation=tr.rotation;s.skewX=tr.skewX;s.scaleX=tr.scaleX;s.scaleY=tr.scaleY;s.x=tr.x;s.y=tr.y;if(_supports3D){s.z=tr.z;s.rotationX=tr.rotationX;s.rotationY=tr.rotationY;s.scaleZ=tr.scaleZ}if(s.filters){delete s.filters}return s},_cssDif=function(t,s1,s2,vars,forceLookup){var difs={},style=t.style,val,p,mpt;for(p in s2){if(p!=="cssText")if(p!=="length")if(isNaN(p))if(s1[p]!==(val=s2[p])||forceLookup&&forceLookup[p])if(p.indexOf("Origin")===-1)if(typeof val==="number"||typeof val==="string"){difs[p]=val==="auto"&&(p==="left"||p==="top")?_calculateOffset(t,p):(val===""||val==="auto"||val==="none")&&typeof s1[p]==="string"&&s1[p].replace(_NaNExp,"")!==""?0:val;if(style[p]!==undefined){mpt=new MiniPropTween(style,p,style[p],mpt)}}}if(vars){for(p in vars){if(p!=="className"){difs[p]=vars[p]}}}return{difs:difs,firstMPT:mpt}},_dimensions={width:["Left","Right"],height:["Top","Bottom"]},_margins=["marginLeft","marginRight","marginTop","marginBottom"],_getDimension=function(t,p,cs){var v=parseFloat(p==="width"?t.offsetWidth:t.offsetHeight),a=_dimensions[p],i=a.length;cs=cs||_getComputedStyle(t,null);while(--i>-1){v-=parseFloat(_getStyle(t,"padding"+a[i],cs,true))||0;v-=parseFloat(_getStyle(t,"border"+a[i]+"Width",cs,true))||0}return v},_parsePosition=function(v,recObj){if(v==="contain"||v==="auto"||v==="auto auto"){return v+" "}if(v==null||v===""){v="0 0"}var a=v.split(" "),x=v.indexOf("left")!==-1?"0%":v.indexOf("right")!==-1?"100%":a[0],y=v.indexOf("top")!==-1?"0%":v.indexOf("bottom")!==-1?"100%":a[1];if(y==null){y=x==="center"?"50%":"0"}else if(y==="center"){y="50%"}if(x==="center"||isNaN(parseFloat(x))&&(x+"").indexOf("=")===-1){x="50%"}v=x+" "+y+(a.length>2?" "+a[2]:"");if(recObj){recObj.oxp=x.indexOf("%")!==-1;recObj.oyp=y.indexOf("%")!==-1;recObj.oxr=x.charAt(1)==="=";recObj.oyr=y.charAt(1)==="=";recObj.ox=parseFloat(x.replace(_NaNExp,""));recObj.oy=parseFloat(y.replace(_NaNExp,""));recObj.v=v}return recObj||v},_parseChange=function(e,b){return typeof e==="string"&&e.charAt(1)==="="?parseInt(e.charAt(0)+"1",10)*parseFloat(e.substr(2)):parseFloat(e)-parseFloat(b)},_parseVal=function(v,d){return v==null?d:typeof v==="string"&&v.charAt(1)==="="?parseInt(v.charAt(0)+"1",10)*parseFloat(v.substr(2))+d:parseFloat(v)},_parseAngle=function(v,d,p,directionalEnd){var min=1e-6,cap,split,dif,result,isRelative;if(v==null){result=d}else if(typeof v==="number"){result=v}else{cap=360;split=v.split("_");isRelative=v.charAt(1)==="=";dif=(isRelative?parseInt(v.charAt(0)+"1",10)*parseFloat(split[0].substr(2)):parseFloat(split[0]))*(v.indexOf("rad")===-1?1:_RAD2DEG)-(isRelative?0:d);if(split.length){if(directionalEnd){directionalEnd[p]=d+dif}if(v.indexOf("short")!==-1){dif=dif%cap;if(dif!==dif%(cap/2)){dif=dif<0?dif+cap:dif-cap}}if(v.indexOf("_cw")!==-1&&dif<0){dif=(dif+cap*9999999999)%cap-(dif/cap|0)*cap}else if(v.indexOf("ccw")!==-1&&dif>0){dif=(dif-cap*9999999999)%cap-(dif/cap|0)*cap}}result=d+dif}if(result<min&&result>-min){result=0}return result},_colorLookup={aqua:[0,255,255],lime:[0,255,0],silver:[192,192,192],black:[0,0,0],maroon:[128,0,0],teal:[0,128,128],blue:[0,0,255],navy:[0,0,128],white:[255,255,255],fuchsia:[255,0,255],olive:[128,128,0],yellow:[255,255,0],orange:[255,165,0],gray:[128,128,128],purple:[128,0,128],green:[0,128,0],red:[255,0,0],pink:[255,192,203],cyan:[0,255,255],transparent:[255,255,255,0]},_hue=function(h,m1,m2){h=h<0?h+1:h>1?h-1:h;return(h*6<1?m1+(m2-m1)*h*6:h<.5?m2:h*3<2?m1+(m2-m1)*(2/3-h)*6:m1)*255+.5|0},_parseColor=CSSPlugin.parseColor=function(v,toHSL){var a,r,g,b,h,s,l,max,min,d,wasHSL;if(!v){a=_colorLookup.black}else if(typeof v==="number"){a=[v>>16,v>>8&255,v&255]}else{if(v.charAt(v.length-1)===","){v=v.substr(0,v.length-1)}if(_colorLookup[v]){a=_colorLookup[v]}else if(v.charAt(0)==="#"){if(v.length===4){r=v.charAt(1);g=v.charAt(2);b=v.charAt(3);v="#"+r+r+g+g+b+b}v=parseInt(v.substr(1),16);a=[v>>16,v>>8&255,v&255]}else if(v.substr(0,3)==="hsl"){a=wasHSL=v.match(_numExp);if(!toHSL){h=Number(a[0])%360/360;s=Number(a[1])/100;l=Number(a[2])/100;g=l<=.5?l*(s+1):l+s-l*s;r=l*2-g;if(a.length>3){a[3]=Number(v[3])}a[0]=_hue(h+1/3,r,g);a[1]=_hue(h,r,g);a[2]=_hue(h-1/3,r,g)}else if(v.indexOf("=")!==-1){return v.match(_relNumExp)}}else{a=v.match(_numExp)||_colorLookup.transparent}a[0]=Number(a[0]);a[1]=Number(a[1]);a[2]=Number(a[2]);if(a.length>3){a[3]=Number(a[3])}}if(toHSL&&!wasHSL){r=a[0]/255;g=a[1]/255;b=a[2]/255;max=Math.max(r,g,b);min=Math.min(r,g,b);l=(max+min)/2;if(max===min){h=s=0}else{d=max-min;s=l>.5?d/(2-max-min):d/(max+min);h=max===r?(g-b)/d+(g<b?6:0):max===g?(b-r)/d+2:(r-g)/d+4;h*=60}a[0]=h+.5|0;a[1]=s*100+.5|0;a[2]=l*100+.5|0}return a},_formatColors=function(s,toHSL){var colors=s.match(_colorExp)||[],charIndex=0,parsed=colors.length?"":s,i,color,temp;for(i=0;i<colors.length;i++){color=colors[i];temp=s.substr(charIndex,s.indexOf(color,charIndex)-charIndex);charIndex+=temp.length+color.length;color=_parseColor(color,toHSL);if(color.length===3){color.push(1)}parsed+=temp+(toHSL?"hsla("+color[0]+","+color[1]+"%,"+color[2]+"%,"+color[3]:"rgba("+color.join(","))+")"}return parsed},_colorExp="(?:\\b(?:(?:rgb|rgba|hsl|hsla)\\(.+?\\))|\\B#.+?\\b";for(p in _colorLookup){_colorExp+="|"+p+"\\b"}_colorExp=new RegExp(_colorExp+")","gi");CSSPlugin.colorStringFilter=function(a){var combined=a[0]+a[1],toHSL;_colorExp.lastIndex=0;if(_colorExp.test(combined)){toHSL=combined.indexOf("hsl(")!==-1||combined.indexOf("hsla(")!==-1;a[0]=_formatColors(a[0],toHSL);a[1]=_formatColors(a[1],toHSL)}};if(!TweenLite.defaultStringFilter){TweenLite.defaultStringFilter=CSSPlugin.colorStringFilter}var _getFormatter=function(dflt,clr,collapsible,multi){if(dflt==null){return function(v){return v}}var dColor=clr?(dflt.match(_colorExp)||[""])[0]:"",dVals=dflt.split(dColor).join("").match(_valuesExp)||[],pfx=dflt.substr(0,dflt.indexOf(dVals[0])),sfx=dflt.charAt(dflt.length-1)===")"?")":"",delim=dflt.indexOf(" ")!==-1?" ":",",numVals=dVals.length,dSfx=numVals>0?dVals[0].replace(_numExp,""):"",formatter;if(!numVals){return function(v){return v}}if(clr){formatter=function(v){var color,vals,i,a;if(typeof v==="number"){v+=dSfx}else if(multi&&_commasOutsideParenExp.test(v)){a=v.replace(_commasOutsideParenExp,"|").split("|");for(i=0;i<a.length;i++){a[i]=formatter(a[i])}return a.join(",")}color=(v.match(_colorExp)||[dColor])[0];vals=v.split(color).join("").match(_valuesExp)||[];i=vals.length;if(numVals>i--){while(++i<numVals){vals[i]=collapsible?vals[(i-1)/2|0]:dVals[i]}}return pfx+vals.join(delim)+delim+color+sfx+(v.indexOf("inset")!==-1?" inset":"")};return formatter}formatter=function(v){var vals,a,i;if(typeof v==="number"){v+=dSfx}else if(multi&&_commasOutsideParenExp.test(v)){a=v.replace(_commasOutsideParenExp,"|").split("|");for(i=0;i<a.length;i++){a[i]=formatter(a[i])}return a.join(",")}vals=v.match(_valuesExp)||[];i=vals.length;if(numVals>i--){while(++i<numVals){vals[i]=collapsible?vals[(i-1)/2|0]:dVals[i]}}return pfx+vals.join(delim)+sfx};return formatter},_getEdgeParser=function(props){props=props.split(",");return function(t,e,p,cssp,pt,plugin,vars){var a=(e+"").split(" "),i;vars={};for(i=0;i<4;i++){vars[props[i]]=a[i]=a[i]||a[(i-1)/2>>0]}return cssp.parse(t,vars,pt,plugin)}},_setPluginRatio=_internals._setPluginRatio=function(v){this.plugin.setRatio(v);var d=this.data,proxy=d.proxy,mpt=d.firstMPT,min=1e-6,val,pt,i,str;while(mpt){val=proxy[mpt.v];if(mpt.r){val=Math.round(val)}else if(val<min&&val>-min){val=0}mpt.t[mpt.p]=val;mpt=mpt._next}if(d.autoRotate){d.autoRotate.rotation=proxy.rotation}if(v===1){mpt=d.firstMPT;while(mpt){pt=mpt.t;if(!pt.type){pt.e=pt.s+pt.xs0}else if(pt.type===1){str=pt.xs0+pt.s+pt.xs1;for(i=1;i<pt.l;i++){str+=pt["xn"+i]+pt["xs"+(i+1)]}pt.e=str}mpt=mpt._next}}},MiniPropTween=function(t,p,v,next,r){this.t=t;this.p=p;this.v=v;this.r=r;if(next){next._prev=this;this._next=next}},_parseToProxy=_internals._parseToProxy=function(t,vars,cssp,pt,plugin,shallow){var bpt=pt,start={},end={},transform=cssp._transform,oldForce=_forcePT,i,p,xp,mpt,firstPT;cssp._transform=null;_forcePT=vars;pt=firstPT=cssp.parse(t,vars,pt,plugin);_forcePT=oldForce;if(shallow){cssp._transform=transform;if(bpt){bpt._prev=null;if(bpt._prev){bpt._prev._next=null}}}while(pt&&pt!==bpt){if(pt.type<=1){p=pt.p;end[p]=pt.s+pt.c;start[p]=pt.s;if(!shallow){mpt=new MiniPropTween(pt,"s",p,mpt,pt.r);pt.c=0}if(pt.type===1){i=pt.l;while(--i>0){xp="xn"+i;p=pt.p+"_"+xp;end[p]=pt.data[xp];start[p]=pt[xp];if(!shallow){mpt=new MiniPropTween(pt,xp,p,mpt,pt.rxp[xp])}}}}pt=pt._next}return{proxy:start,end:end,firstMPT:mpt,pt:firstPT}},CSSPropTween=_internals.CSSPropTween=function(t,p,s,c,next,type,n,r,pr,b,e){this.t=t;this.p=p;this.s=s;this.c=c;this.n=n||p;if(!(t instanceof CSSPropTween)){_overwriteProps.push(this.n)}this.r=r;this.type=type||0;if(pr){this.pr=pr;_hasPriority=true}this.b=b===undefined?s:b;this.e=e===undefined?s+c:e;if(next){this._next=next;next._prev=this}},_addNonTweeningNumericPT=function(target,prop,start,end,next,overwriteProp){var pt=new CSSPropTween(target,prop,start,end-start,next,-1,overwriteProp);pt.b=start;pt.e=pt.xs0=end;return pt},_parseComplex=CSSPlugin.parseComplex=function(t,p,b,e,clrs,dflt,pt,pr,plugin,setRatio){b=b||dflt||"";pt=new CSSPropTween(t,p,0,0,pt,setRatio?2:1,null,false,pr,b,e);e+="";var ba=b.split(", ").join(",").split(" "),ea=e.split(", ").join(",").split(" "),l=ba.length,autoRound=_autoRound!==false,i,xi,ni,bv,ev,bnums,enums,bn,hasAlpha,temp,cv,str,useHSL;if(e.indexOf(",")!==-1||b.indexOf(",")!==-1){ba=ba.join(" ").replace(_commasOutsideParenExp,", ").split(" ");ea=ea.join(" ").replace(_commasOutsideParenExp,", ").split(" ");l=ba.length}if(l!==ea.length){ba=(dflt||"").split(" ");l=ba.length}pt.plugin=plugin;pt.setRatio=setRatio;_colorExp.lastIndex=0;for(i=0;i<l;i++){bv=ba[i];ev=ea[i];bn=parseFloat(bv);if(bn||bn===0){pt.appendXtra("",bn,_parseChange(ev,bn),ev.replace(_relNumExp,""),autoRound&&ev.indexOf("px")!==-1,true)}else if(clrs&&_colorExp.test(bv)){str=ev.charAt(ev.length-1)===","?"),":")";useHSL=ev.indexOf("hsl")!==-1&&_supportsOpacity;bv=_parseColor(bv,useHSL);ev=_parseColor(ev,useHSL);hasAlpha=bv.length+ev.length>6;if(hasAlpha&&!_supportsOpacity&&ev[3]===0){pt["xs"+pt.l]+=pt.l?" transparent":"transparent";pt.e=pt.e.split(ea[i]).join("transparent")}else{if(!_supportsOpacity){hasAlpha=false}if(useHSL){pt.appendXtra(hasAlpha?"hsla(":"hsl(",bv[0],_parseChange(ev[0],bv[0]),",",false,true).appendXtra("",bv[1],_parseChange(ev[1],bv[1]),"%,",false).appendXtra("",bv[2],_parseChange(ev[2],bv[2]),hasAlpha?"%,":"%"+str,false)}else{pt.appendXtra(hasAlpha?"rgba(":"rgb(",bv[0],ev[0]-bv[0],",",true,true).appendXtra("",bv[1],ev[1]-bv[1],",",true).appendXtra("",bv[2],ev[2]-bv[2],hasAlpha?",":str,true)}if(hasAlpha){bv=bv.length<4?1:bv[3];pt.appendXtra("",bv,(ev.length<4?1:ev[3])-bv,str,false)}}_colorExp.lastIndex=0}else{bnums=bv.match(_numExp);if(!bnums){pt["xs"+pt.l]+=pt.l?" "+bv:bv}else{enums=ev.match(_relNumExp);if(!enums||enums.length!==bnums.length){return pt}ni=0;for(xi=0;xi<bnums.length;xi++){cv=bnums[xi];temp=bv.indexOf(cv,ni);pt.appendXtra(bv.substr(ni,temp-ni),Number(cv),_parseChange(enums[xi],cv),"",autoRound&&bv.substr(temp+cv.length,2)==="px",xi===0);ni=temp+cv.length}pt["xs"+pt.l]+=bv.substr(ni)}}}if(e.indexOf("=")!==-1)if(pt.data){str=pt.xs0+pt.data.s;for(i=1;i<pt.l;i++){str+=pt["xs"+i]+pt.data["xn"+i]}pt.e=str+pt["xs"+i]}if(!pt.l){pt.type=-1;pt.xs0=pt.e}return pt.xfirst||pt},i=9;p=CSSPropTween.prototype;p.l=p.pr=0;while(--i>0){p["xn"+i]=0;p["xs"+i]=""}p.xs0="";p._next=p._prev=p.xfirst=p.data=p.plugin=p.setRatio=p.rxp=null;p.appendXtra=function(pfx,s,c,sfx,r,pad){var pt=this,l=pt.l;pt["xs"+l]+=pad&&l?" "+pfx:pfx||"";if(!c)if(l!==0&&!pt.plugin){pt["xs"+l]+=s+(sfx||"");return pt}pt.l++;pt.type=pt.setRatio?2:1;pt["xs"+pt.l]=sfx||"";if(l>0){pt.data["xn"+l]=s+c;pt.rxp["xn"+l]=r;pt["xn"+l]=s;if(!pt.plugin){pt.xfirst=new CSSPropTween(pt,"xn"+l,s,c,pt.xfirst||pt,0,pt.n,r,pt.pr);pt.xfirst.xs0=0}return pt}pt.data={s:s+c};pt.rxp={};pt.s=s;pt.c=c;pt.r=r;return pt};var SpecialProp=function(p,options){options=options||{};this.p=options.prefix?_checkPropPrefix(p)||p:p;_specialProps[p]=_specialProps[this.p]=this;this.format=options.formatter||_getFormatter(options.defaultValue,options.color,options.collapsible,options.multi);if(options.parser){this.parse=options.parser}this.clrs=options.color;this.multi=options.multi;this.keyword=options.keyword;this.dflt=options.defaultValue;this.pr=options.priority||0},_registerComplexSpecialProp=_internals._registerComplexSpecialProp=function(p,options,defaults){if(typeof options!=="object"){options={parser:defaults}}var a=p.split(","),d=options.defaultValue,i,temp;defaults=defaults||[d];for(i=0;i<a.length;i++){options.prefix=i===0&&options.prefix;options.defaultValue=defaults[i]||d;temp=new SpecialProp(a[i],options)}},_registerPluginProp=function(p){if(!_specialProps[p]){var pluginName=p.charAt(0).toUpperCase()+p.substr(1)+"Plugin";_registerComplexSpecialProp(p,{parser:function(t,e,p,cssp,pt,plugin,vars){var pluginClass=_globals.com.greensock.plugins[pluginName];if(!pluginClass){_log("Error: "+pluginName+" js file not loaded.");return pt}pluginClass._cssRegister();return _specialProps[p].parse(t,e,p,cssp,pt,plugin,vars)}})}};p=SpecialProp.prototype;p.parseComplex=function(t,b,e,pt,plugin,setRatio){var kwd=this.keyword,i,ba,ea,l,bi,ei;if(this.multi)if(_commasOutsideParenExp.test(e)||_commasOutsideParenExp.test(b)){ba=b.replace(_commasOutsideParenExp,"|").split("|");ea=e.replace(_commasOutsideParenExp,"|").split("|")}else if(kwd){ba=[b];ea=[e]}if(ea){l=ea.length>ba.length?ea.length:ba.length;for(i=0;i<l;i++){b=ba[i]=ba[i]||this.dflt;e=ea[i]=ea[i]||this.dflt;if(kwd){bi=b.indexOf(kwd);ei=e.indexOf(kwd);if(bi!==ei){if(ei===-1){ba[i]=ba[i].split(kwd).join("")}else if(bi===-1){ba[i]+=" "+kwd}}}}b=ba.join(", ");e=ea.join(", ")}return _parseComplex(t,this.p,b,e,this.clrs,this.dflt,pt,this.pr,plugin,setRatio)};p.parse=function(t,e,p,cssp,pt,plugin,vars){return this.parseComplex(t.style,this.format(_getStyle(t,this.p,_cs,false,this.dflt)),this.format(e),pt,plugin)};CSSPlugin.registerSpecialProp=function(name,onInitTween,priority){_registerComplexSpecialProp(name,{parser:function(t,e,p,cssp,pt,plugin,vars){var rv=new CSSPropTween(t,p,0,0,pt,2,p,false,priority);rv.plugin=plugin;rv.setRatio=onInitTween(t,e,cssp._tween,p);return rv},priority:priority})};CSSPlugin.useSVGTransformAttr=_isSafari||_isFirefox;var _transformProps="scaleX,scaleY,scaleZ,x,y,z,skewX,skewY,rotation,rotationX,rotationY,perspective,xPercent,yPercent".split(","),_transformProp=_checkPropPrefix("transform"),_transformPropCSS=_prefixCSS+"transform",_transformOriginProp=_checkPropPrefix("transformOrigin"),_supports3D=_checkPropPrefix("perspective")!==null,Transform=_internals.Transform=function(){this.perspective=parseFloat(CSSPlugin.defaultTransformPerspective)||0;this.force3D=CSSPlugin.defaultForce3D===false||!_supports3D?false:CSSPlugin.defaultForce3D||"auto"},_SVGElement=window.SVGElement,_useSVGTransformAttr,_createSVG=function(type,container,attributes){var element=_doc.createElementNS("http://www.w3.org/2000/svg",type),reg=/([a-z])([A-Z])/g,p;for(p in attributes){element.setAttributeNS(null,p.replace(reg,"$1-$2").toLowerCase(),attributes[p])}container.appendChild(element);return element},_docElement=_doc.documentElement,_forceSVGTransformAttr=function(){var force=_ieVers||/Android/i.test(_agent)&&!window.chrome,svg,rect,width;if(_doc.createElementNS&&!force){svg=_createSVG("svg",_docElement);rect=_createSVG("rect",svg,{width:100,height:50,x:100});width=rect.getBoundingClientRect().width;rect.style[_transformOriginProp]="50% 50%";rect.style[_transformProp]="scaleX(0.5)";force=width===rect.getBoundingClientRect().width&&!(_isFirefox&&_supports3D);_docElement.removeChild(svg)}return force}(),_parseSVGOrigin=function(e,local,decoratee,absolute,smoothOrigin){var tm=e._gsTransform,m=_getMatrix(e,true),v,x,y,xOrigin,yOrigin,a,b,c,d,tx,ty,determinant,xOriginOld,yOriginOld;if(tm){xOriginOld=tm.xOrigin;yOriginOld=tm.yOrigin}if(!absolute||(v=absolute.split(" ")).length<2){b=e.getBBox();local=_parsePosition(local).split(" ");v=[(local[0].indexOf("%")!==-1?parseFloat(local[0])/100*b.width:parseFloat(local[0]))+b.x,(local[1].indexOf("%")!==-1?parseFloat(local[1])/100*b.height:parseFloat(local[1]))+b.y]}decoratee.xOrigin=xOrigin=parseFloat(v[0]);decoratee.yOrigin=yOrigin=parseFloat(v[1]);if(absolute&&m!==_identity2DMatrix){a=m[0];b=m[1];c=m[2];d=m[3];tx=m[4];ty=m[5];determinant=a*d-b*c;x=xOrigin*(d/determinant)+yOrigin*(-c/determinant)+(c*ty-d*tx)/determinant;y=xOrigin*(-b/determinant)+yOrigin*(a/determinant)-(a*ty-b*tx)/determinant;xOrigin=decoratee.xOrigin=v[0]=x;yOrigin=decoratee.yOrigin=v[1]=y}if(tm){if(smoothOrigin||smoothOrigin!==false&&CSSPlugin.defaultSmoothOrigin!==false){x=xOrigin-xOriginOld;y=yOrigin-yOriginOld;tm.xOffset+=x*m[0]+y*m[2]-x;tm.yOffset+=x*m[1]+y*m[3]-y}else{tm.xOffset=tm.yOffset=0}}e.setAttribute("data-svg-origin",v.join(" "))},_isSVG=function(e){return!!(_SVGElement&&typeof e.getBBox==="function"&&e.getCTM&&(!e.parentNode||e.parentNode.getBBox&&e.parentNode.getCTM))},_identity2DMatrix=[1,0,0,1,0,0],_getMatrix=function(e,force2D){var tm=e._gsTransform||new Transform,rnd=1e5,isDefault,s,m,n,dec;if(_transformProp){s=_getStyle(e,_transformPropCSS,null,true)}else if(e.currentStyle){s=e.currentStyle.filter.match(_ieGetMatrixExp);s=s&&s.length===4?[s[0].substr(4),Number(s[2].substr(4)),Number(s[1].substr(4)),s[3].substr(4),tm.x||0,tm.y||0].join(","):""}isDefault=!s||s==="none"||s==="matrix(1, 0, 0, 1, 0, 0)";if(tm.svg||e.getBBox&&_isSVG(e)){if(isDefault&&(e.style[_transformProp]+"").indexOf("matrix")!==-1){s=e.style[_transformProp];isDefault=0}m=e.getAttribute("transform");if(isDefault&&m){if(m.indexOf("matrix")!==-1){s=m;isDefault=0}else if(m.indexOf("translate")!==-1){s="matrix(1,0,0,1,"+m.match(/(?:\-|\b)[\d\-\.e]+\b/gi).join(",")+")";isDefault=0}}}if(isDefault){return _identity2DMatrix}m=(s||"").match(/(?:\-|\b)[\d\-\.e]+\b/gi)||[];i=m.length;while(--i>-1){n=Number(m[i]);m[i]=(dec=n-(n|=0))?(dec*rnd+(dec<0?-.5:.5)|0)/rnd+n:n}return force2D&&m.length>6?[m[0],m[1],m[4],m[5],m[12],m[13]]:m},_getTransform=_internals.getTransform=function(t,cs,rec,parse){if(t._gsTransform&&rec&&!parse){return t._gsTransform}var tm=rec?t._gsTransform||new Transform:new Transform,invX=tm.scaleX<0,min=2e-5,rnd=1e5,zOrigin=_supports3D?parseFloat(_getStyle(t,_transformOriginProp,cs,false,"0 0 0").split(" ")[2])||tm.zOrigin||0:0,defaultTransformPerspective=parseFloat(CSSPlugin.defaultTransformPerspective)||0,m,i,scaleX,scaleY,rotation,skewX;tm.svg=!!(t.getBBox&&_isSVG(t));if(tm.svg){_parseSVGOrigin(t,_getStyle(t,_transformOriginProp,_cs,false,"50% 50%")+"",tm,t.getAttribute("data-svg-origin"));_useSVGTransformAttr=CSSPlugin.useSVGTransformAttr||_forceSVGTransformAttr}m=_getMatrix(t);if(m!==_identity2DMatrix){if(m.length===16){var a11=m[0],a21=m[1],a31=m[2],a41=m[3],a12=m[4],a22=m[5],a32=m[6],a42=m[7],a13=m[8],a23=m[9],a33=m[10],a14=m[12],a24=m[13],a34=m[14],a43=m[11],angle=Math.atan2(a32,a33),t1,t2,t3,t4,cos,sin;if(tm.zOrigin){a34=-tm.zOrigin;a14=a13*a34-m[12];a24=a23*a34-m[13];a34=a33*a34+tm.zOrigin-m[14]}tm.rotationX=angle*_RAD2DEG;if(angle){cos=Math.cos(-angle);sin=Math.sin(-angle);t1=a12*cos+a13*sin;t2=a22*cos+a23*sin;t3=a32*cos+a33*sin;a13=a12*-sin+a13*cos;a23=a22*-sin+a23*cos;a33=a32*-sin+a33*cos;a43=a42*-sin+a43*cos;a12=t1;a22=t2;a32=t3}angle=Math.atan2(a13,a33);tm.rotationY=angle*_RAD2DEG;if(angle){cos=Math.cos(-angle);sin=Math.sin(-angle);t1=a11*cos-a13*sin;t2=a21*cos-a23*sin;t3=a31*cos-a33*sin;a23=a21*sin+a23*cos;a33=a31*sin+a33*cos;a43=a41*sin+a43*cos;a11=t1;a21=t2;a31=t3}angle=Math.atan2(a21,a11);tm.rotation=angle*_RAD2DEG;if(angle){cos=Math.cos(-angle);sin=Math.sin(-angle);a11=a11*cos+a12*sin;t2=a21*cos+a22*sin;a22=a21*-sin+a22*cos;a32=a31*-sin+a32*cos;a21=t2}if(tm.rotationX&&Math.abs(tm.rotationX)+Math.abs(tm.rotation)>359.9){tm.rotationX=tm.rotation=0;tm.rotationY+=180}tm.scaleX=(Math.sqrt(a11*a11+a21*a21)*rnd+.5|0)/rnd;tm.scaleY=(Math.sqrt(a22*a22+a23*a23)*rnd+.5|0)/rnd;tm.scaleZ=(Math.sqrt(a32*a32+a33*a33)*rnd+.5|0)/rnd;tm.skewX=0;tm.perspective=a43?1/(a43<0?-a43:a43):0;tm.x=a14;tm.y=a24;tm.z=a34;if(tm.svg){tm.x-=tm.xOrigin-(tm.xOrigin*a11-tm.yOrigin*a12);tm.y-=tm.yOrigin-(tm.yOrigin*a21-tm.xOrigin*a22)}}else if((!_supports3D||parse||!m.length||tm.x!==m[4]||tm.y!==m[5]||!tm.rotationX&&!tm.rotationY)&&!(tm.x!==undefined&&_getStyle(t,"display",cs)==="none")){var k=m.length>=6,a=k?m[0]:1,b=m[1]||0,c=m[2]||0,d=k?m[3]:1;tm.x=m[4]||0;tm.y=m[5]||0;scaleX=Math.sqrt(a*a+b*b);scaleY=Math.sqrt(d*d+c*c);rotation=a||b?Math.atan2(b,a)*_RAD2DEG:tm.rotation||0;skewX=c||d?Math.atan2(c,d)*_RAD2DEG+rotation:tm.skewX||0;if(Math.abs(skewX)>90&&Math.abs(skewX)<270){if(invX){scaleX*=-1;skewX+=rotation<=0?180:-180;rotation+=rotation<=0?180:-180}else{scaleY*=-1;skewX+=skewX<=0?180:-180}}tm.scaleX=scaleX;tm.scaleY=scaleY;tm.rotation=rotation;tm.skewX=skewX;if(_supports3D){tm.rotationX=tm.rotationY=tm.z=0;tm.perspective=defaultTransformPerspective;tm.scaleZ=1}if(tm.svg){tm.x-=tm.xOrigin-(tm.xOrigin*a+tm.yOrigin*c);tm.y-=tm.yOrigin-(tm.xOrigin*b+tm.yOrigin*d)}}tm.zOrigin=zOrigin;for(i in tm){if(tm[i]<min)if(tm[i]>-min){tm[i]=0}}}if(rec){t._gsTransform=tm;if(tm.svg){if(_useSVGTransformAttr&&t.style[_transformProp]){TweenLite.delayedCall(.001,function(){_removeProp(t.style,_transformProp)})}else if(!_useSVGTransformAttr&&t.getAttribute("transform")){TweenLite.delayedCall(.001,function(){t.removeAttribute("transform")})}}}return tm},_setIETransformRatio=function(v){var t=this.data,ang=-t.rotation*_DEG2RAD,skew=ang+t.skewX*_DEG2RAD,rnd=1e5,a=(Math.cos(ang)*t.scaleX*rnd|0)/rnd,b=(Math.sin(ang)*t.scaleX*rnd|0)/rnd,c=(Math.sin(skew)*-t.scaleY*rnd|0)/rnd,d=(Math.cos(skew)*t.scaleY*rnd|0)/rnd,style=this.t.style,cs=this.t.currentStyle,filters,val;if(!cs){return}val=b;b=-c;c=-val;filters=cs.filter;style.filter="";var w=this.t.offsetWidth,h=this.t.offsetHeight,clip=cs.position!=="absolute",m="progid:DXImageTransform.Microsoft.Matrix(M11="+a+", M12="+b+", M21="+c+", M22="+d,ox=t.x+w*t.xPercent/100,oy=t.y+h*t.yPercent/100,dx,dy;if(t.ox!=null){dx=(t.oxp?w*t.ox*.01:t.ox)-w/2;dy=(t.oyp?h*t.oy*.01:t.oy)-h/2;ox+=dx-(dx*a+dy*b);oy+=dy-(dx*c+dy*d)}if(!clip){m+=", sizingMethod='auto expand')"}else{dx=w/2;dy=h/2;m+=", Dx="+(dx-(dx*a+dy*b)+ox)+", Dy="+(dy-(dx*c+dy*d)+oy)+")"}if(filters.indexOf("DXImageTransform.Microsoft.Matrix(")!==-1){style.filter=filters.replace(_ieSetMatrixExp,m)}else{style.filter=m+" "+filters}if(v===0||v===1)if(a===1)if(b===0)if(c===0)if(d===1)if(!clip||m.indexOf("Dx=0, Dy=0")!==-1)if(!_opacityExp.test(filters)||parseFloat(RegExp.$1)===100)if(filters.indexOf("gradient("&&filters.indexOf("Alpha"))===-1){style.removeAttribute("filter")}if(!clip){var mult=_ieVers<8?1:-1,marg,prop,dif;dx=t.ieOffsetX||0;dy=t.ieOffsetY||0;t.ieOffsetX=Math.round((w-((a<0?-a:a)*w+(b<0?-b:b)*h))/2+ox);t.ieOffsetY=Math.round((h-((d<0?-d:d)*h+(c<0?-c:c)*w))/2+oy);for(i=0;i<4;i++){prop=_margins[i];marg=cs[prop];val=marg.indexOf("px")!==-1?parseFloat(marg):_convertToPixels(this.t,prop,parseFloat(marg),marg.replace(_suffixExp,""))||0;if(val!==t[prop]){dif=i<2?-t.ieOffsetX:-t.ieOffsetY}else{dif=i<2?dx-t.ieOffsetX:dy-t.ieOffsetY}style[prop]=(t[prop]=Math.round(val-dif*(i===0||i===2?1:mult)))+"px"}}},_setTransformRatio=_internals.set3DTransformRatio=_internals.setTransformRatio=function(v){var t=this.data,style=this.t.style,angle=t.rotation,rotationX=t.rotationX,rotationY=t.rotationY,sx=t.scaleX,sy=t.scaleY,sz=t.scaleZ,x=t.x,y=t.y,z=t.z,isSVG=t.svg,perspective=t.perspective,force3D=t.force3D,a11,a12,a13,a21,a22,a23,a31,a32,a33,a41,a42,a43,zOrigin,min,cos,sin,t1,t2,transform,comma,zero,skew,rnd;if(((v===1||v===0)&&force3D==="auto"&&(this.tween._totalTime===this.tween._totalDuration||!this.tween._totalTime)||!force3D)&&!z&&!perspective&&!rotationY&&!rotationX||_useSVGTransformAttr&&isSVG||!_supports3D){if(angle||t.skewX||isSVG){angle*=_DEG2RAD;skew=t.skewX*_DEG2RAD;rnd=1e5;a11=Math.cos(angle)*sx;a21=Math.sin(angle)*sx;a12=Math.sin(angle-skew)*-sy;a22=Math.cos(angle-skew)*sy;if(skew&&t.skewType==="simple"){t1=Math.tan(skew);t1=Math.sqrt(1+t1*t1);a12*=t1;a22*=t1;if(t.skewY){a11*=t1;a21*=t1}}if(isSVG){x+=t.xOrigin-(t.xOrigin*a11+t.yOrigin*a12)+t.xOffset;y+=t.yOrigin-(t.xOrigin*a21+t.yOrigin*a22)+t.yOffset;if(_useSVGTransformAttr&&(t.xPercent||t.yPercent)){min=this.t.getBBox();x+=t.xPercent*.01*min.width;y+=t.yPercent*.01*min.height}min=1e-6;if(x<min)if(x>-min){x=0}if(y<min)if(y>-min){y=0}}transform=(a11*rnd|0)/rnd+","+(a21*rnd|0)/rnd+","+(a12*rnd|0)/rnd+","+(a22*rnd|0)/rnd+","+x+","+y+")";if(isSVG&&_useSVGTransformAttr){this.t.setAttribute("transform","matrix("+transform)}else{style[_transformProp]=(t.xPercent||t.yPercent?"translate("+t.xPercent+"%,"+t.yPercent+"%) matrix(":"matrix(")+transform}}else{style[_transformProp]=(t.xPercent||t.yPercent?"translate("+t.xPercent+"%,"+t.yPercent+"%) matrix(":"matrix(")+sx+",0,0,"+sy+","+x+","+y+")"}return}if(_isFirefox){min=1e-4;if(sx<min&&sx>-min){sx=sz=2e-5}if(sy<min&&sy>-min){sy=sz=2e-5}if(perspective&&!t.z&&!t.rotationX&&!t.rotationY){perspective=0}}if(angle||t.skewX){angle*=_DEG2RAD;cos=a11=Math.cos(angle);sin=a21=Math.sin(angle);if(t.skewX){angle-=t.skewX*_DEG2RAD;cos=Math.cos(angle);sin=Math.sin(angle);if(t.skewType==="simple"){t1=Math.tan(t.skewX*_DEG2RAD);t1=Math.sqrt(1+t1*t1);cos*=t1;sin*=t1;if(t.skewY){a11*=t1;a21*=t1}}}a12=-sin;a22=cos}else if(!rotationY&&!rotationX&&sz===1&&!perspective&&!isSVG){style[_transformProp]=(t.xPercent||t.yPercent?"translate("+t.xPercent+"%,"+t.yPercent+"%) translate3d(":"translate3d(")+x+"px,"+y+"px,"+z+"px)"+(sx!==1||sy!==1?" scale("+sx+","+sy+")":"");return}else{a11=a22=1;a12=a21=0}a33=1;a13=a23=a31=a32=a41=a42=0;a43=perspective?-1/perspective:0;zOrigin=t.zOrigin;min=1e-6;comma=",";zero="0";angle=rotationY*_DEG2RAD;if(angle){cos=Math.cos(angle);sin=Math.sin(angle);a31=-sin;a41=a43*-sin;a13=a11*sin;a23=a21*sin;a33=cos;a43*=cos;a11*=cos;a21*=cos}angle=rotationX*_DEG2RAD;if(angle){cos=Math.cos(angle);sin=Math.sin(angle);t1=a12*cos+a13*sin;t2=a22*cos+a23*sin;a32=a33*sin;a42=a43*sin;a13=a12*-sin+a13*cos;a23=a22*-sin+a23*cos;a33=a33*cos;a43=a43*cos;a12=t1;a22=t2}if(sz!==1){a13*=sz;a23*=sz;a33*=sz;a43*=sz}if(sy!==1){a12*=sy;a22*=sy;a32*=sy;a42*=sy}if(sx!==1){a11*=sx;a21*=sx;a31*=sx;a41*=sx}if(zOrigin||isSVG){if(zOrigin){x+=a13*-zOrigin;y+=a23*-zOrigin;z+=a33*-zOrigin+zOrigin}if(isSVG){x+=t.xOrigin-(t.xOrigin*a11+t.yOrigin*a12)+t.xOffset;y+=t.yOrigin-(t.xOrigin*a21+t.yOrigin*a22)+t.yOffset}if(x<min&&x>-min){x=zero}if(y<min&&y>-min){y=zero}if(z<min&&z>-min){z=0}}transform=t.xPercent||t.yPercent?"translate("+t.xPercent+"%,"+t.yPercent+"%) matrix3d(":"matrix3d(";transform+=(a11<min&&a11>-min?zero:a11)+comma+(a21<min&&a21>-min?zero:a21)+comma+(a31<min&&a31>-min?zero:a31);transform+=comma+(a41<min&&a41>-min?zero:a41)+comma+(a12<min&&a12>-min?zero:a12)+comma+(a22<min&&a22>-min?zero:a22);if(rotationX||rotationY){transform+=comma+(a32<min&&a32>-min?zero:a32)+comma+(a42<min&&a42>-min?zero:a42)+comma+(a13<min&&a13>-min?zero:a13);transform+=comma+(a23<min&&a23>-min?zero:a23)+comma+(a33<min&&a33>-min?zero:a33)+comma+(a43<min&&a43>-min?zero:a43)+comma}else{transform+=",0,0,0,0,1,0,"}transform+=x+comma+y+comma+z+comma+(perspective?1+-z/perspective:1)+")";style[_transformProp]=transform};p=Transform.prototype;p.x=p.y=p.z=p.skewX=p.skewY=p.rotation=p.rotationX=p.rotationY=p.zOrigin=p.xPercent=p.yPercent=p.xOffset=p.yOffset=0;p.scaleX=p.scaleY=p.scaleZ=1;_registerComplexSpecialProp("transform,scale,scaleX,scaleY,scaleZ,x,y,z,rotation,rotationX,rotationY,rotationZ,skewX,skewY,shortRotation,shortRotationX,shortRotationY,shortRotationZ,transformOrigin,svgOrigin,transformPerspective,directionalRotation,parseTransform,force3D,skewType,xPercent,yPercent,smoothOrigin",{parser:function(t,e,p,cssp,pt,plugin,vars){if(cssp._lastParsedTransform===vars){return pt}cssp._lastParsedTransform=vars;var originalGSTransform=t._gsTransform,style=t.style,min=1e-6,i=_transformProps.length,v=vars,endRotations={},transformOriginString="transformOrigin",m1,m2,skewY,copy,orig,has3D,hasChange,dr,x,y;if(vars.display){copy=_getStyle(t,"display");style.display="block";m1=_getTransform(t,_cs,true,vars.parseTransform);style.display=copy}else{m1=_getTransform(t,_cs,true,vars.parseTransform)}cssp._transform=m1;if(typeof v.transform==="string"&&_transformProp){copy=_tempDiv.style;copy[_transformProp]=v.transform;copy.display="block";copy.position="absolute";_doc.body.appendChild(_tempDiv);m2=_getTransform(_tempDiv,null,false);_doc.body.removeChild(_tempDiv);if(!m2.perspective){m2.perspective=m1.perspective}if(v.xPercent!=null){m2.xPercent=_parseVal(v.xPercent,m1.xPercent)}if(v.yPercent!=null){m2.yPercent=_parseVal(v.yPercent,m1.yPercent)}}else if(typeof v==="object"){m2={scaleX:_parseVal(v.scaleX!=null?v.scaleX:v.scale,m1.scaleX),scaleY:_parseVal(v.scaleY!=null?v.scaleY:v.scale,m1.scaleY),scaleZ:_parseVal(v.scaleZ,m1.scaleZ),x:_parseVal(v.x,m1.x),y:_parseVal(v.y,m1.y),z:_parseVal(v.z,m1.z),xPercent:_parseVal(v.xPercent,m1.xPercent),yPercent:_parseVal(v.yPercent,m1.yPercent),perspective:_parseVal(v.transformPerspective,m1.perspective)};dr=v.directionalRotation;if(dr!=null){if(typeof dr==="object"){for(copy in dr){v[copy]=dr[copy]}}else{v.rotation=dr}}if(typeof v.x==="string"&&v.x.indexOf("%")!==-1){m2.x=0;m2.xPercent=_parseVal(v.x,m1.xPercent)}if(typeof v.y==="string"&&v.y.indexOf("%")!==-1){m2.y=0;m2.yPercent=_parseVal(v.y,m1.yPercent)}m2.rotation=_parseAngle("rotation"in v?v.rotation:"shortRotation"in v?v.shortRotation+"_short":"rotationZ"in v?v.rotationZ:m1.rotation,m1.rotation,"rotation",endRotations);if(_supports3D){m2.rotationX=_parseAngle("rotationX"in v?v.rotationX:"shortRotationX"in v?v.shortRotationX+"_short":m1.rotationX||0,m1.rotationX,"rotationX",endRotations);m2.rotationY=_parseAngle("rotationY"in v?v.rotationY:"shortRotationY"in v?v.shortRotationY+"_short":m1.rotationY||0,m1.rotationY,"rotationY",endRotations)}m2.skewX=v.skewX==null?m1.skewX:_parseAngle(v.skewX,m1.skewX);m2.skewY=v.skewY==null?m1.skewY:_parseAngle(v.skewY,m1.skewY);if(skewY=m2.skewY-m1.skewY){m2.skewX+=skewY;m2.rotation+=skewY}}if(_supports3D&&v.force3D!=null){m1.force3D=v.force3D;hasChange=true}m1.skewType=v.skewType||m1.skewType||CSSPlugin.defaultSkewType;has3D=m1.force3D||m1.z||m1.rotationX||m1.rotationY||m2.z||m2.rotationX||m2.rotationY||m2.perspective;if(!has3D&&v.scale!=null){m2.scaleZ=1}while(--i>-1){p=_transformProps[i];orig=m2[p]-m1[p];if(orig>min||orig<-min||v[p]!=null||_forcePT[p]!=null){hasChange=true;pt=new CSSPropTween(m1,p,m1[p],orig,pt);if(p in endRotations){pt.e=endRotations[p]}pt.xs0=0;pt.plugin=plugin;cssp._overwriteProps.push(pt.n)}}orig=v.transformOrigin;if(m1.svg&&(orig||v.svgOrigin)){x=m1.xOffset;y=m1.yOffset;_parseSVGOrigin(t,_parsePosition(orig),m2,v.svgOrigin,v.smoothOrigin);pt=_addNonTweeningNumericPT(m1,"xOrigin",(originalGSTransform?m1:m2).xOrigin,m2.xOrigin,pt,transformOriginString);pt=_addNonTweeningNumericPT(m1,"yOrigin",(originalGSTransform?m1:m2).yOrigin,m2.yOrigin,pt,transformOriginString);if(x!==m1.xOffset||y!==m1.yOffset){pt=_addNonTweeningNumericPT(m1,"xOffset",originalGSTransform?x:m1.xOffset,m1.xOffset,pt,transformOriginString);pt=_addNonTweeningNumericPT(m1,"yOffset",originalGSTransform?y:m1.yOffset,m1.yOffset,pt,transformOriginString)}orig=_useSVGTransformAttr?null:"0px 0px";

    }if(orig||_supports3D&&has3D&&m1.zOrigin){if(_transformProp){hasChange=true;p=_transformOriginProp;orig=(orig||_getStyle(t,p,_cs,false,"50% 50%"))+"";pt=new CSSPropTween(style,p,0,0,pt,-1,transformOriginString);pt.b=style[p];pt.plugin=plugin;if(_supports3D){copy=m1.zOrigin;orig=orig.split(" ");m1.zOrigin=(orig.length>2&&!(copy!==0&&orig[2]==="0px")?parseFloat(orig[2]):copy)||0;pt.xs0=pt.e=orig[0]+" "+(orig[1]||"50%")+" 0px";pt=new CSSPropTween(m1,"zOrigin",0,0,pt,-1,pt.n);pt.b=copy;pt.xs0=pt.e=m1.zOrigin}else{pt.xs0=pt.e=orig}}else{_parsePosition(orig+"",m1)}}if(hasChange){cssp._transformType=!(m1.svg&&_useSVGTransformAttr)&&(has3D||this._transformType===3)?3:2}return pt},prefix:true});_registerComplexSpecialProp("boxShadow",{defaultValue:"0px 0px 0px 0px #999",prefix:true,color:true,multi:true,keyword:"inset"});_registerComplexSpecialProp("borderRadius",{defaultValue:"0px",parser:function(t,e,p,cssp,pt,plugin){e=this.format(e);var props=["borderTopLeftRadius","borderTopRightRadius","borderBottomRightRadius","borderBottomLeftRadius"],style=t.style,ea1,i,es2,bs2,bs,es,bn,en,w,h,esfx,bsfx,rel,hn,vn,em;w=parseFloat(t.offsetWidth);h=parseFloat(t.offsetHeight);ea1=e.split(" ");for(i=0;i<props.length;i++){if(this.p.indexOf("border")){props[i]=_checkPropPrefix(props[i])}bs=bs2=_getStyle(t,props[i],_cs,false,"0px");if(bs.indexOf(" ")!==-1){bs2=bs.split(" ");bs=bs2[0];bs2=bs2[1]}es=es2=ea1[i];bn=parseFloat(bs);bsfx=bs.substr((bn+"").length);rel=es.charAt(1)==="=";if(rel){en=parseInt(es.charAt(0)+"1",10);es=es.substr(2);en*=parseFloat(es);esfx=es.substr((en+"").length-(en<0?1:0))||""}else{en=parseFloat(es);esfx=es.substr((en+"").length)}if(esfx===""){esfx=_suffixMap[p]||bsfx}if(esfx!==bsfx){hn=_convertToPixels(t,"borderLeft",bn,bsfx);vn=_convertToPixels(t,"borderTop",bn,bsfx);if(esfx==="%"){bs=hn/w*100+"%";bs2=vn/h*100+"%"}else if(esfx==="em"){em=_convertToPixels(t,"borderLeft",1,"em");bs=hn/em+"em";bs2=vn/em+"em"}else{bs=hn+"px";bs2=vn+"px"}if(rel){es=parseFloat(bs)+en+esfx;es2=parseFloat(bs2)+en+esfx}}pt=_parseComplex(style,props[i],bs+" "+bs2,es+" "+es2,false,"0px",pt)}return pt},prefix:true,formatter:_getFormatter("0px 0px 0px 0px",false,true)});_registerComplexSpecialProp("backgroundPosition",{defaultValue:"0 0",parser:function(t,e,p,cssp,pt,plugin){var bp="background-position",cs=_cs||_getComputedStyle(t,null),bs=this.format((cs?_ieVers?cs.getPropertyValue(bp+"-x")+" "+cs.getPropertyValue(bp+"-y"):cs.getPropertyValue(bp):t.currentStyle.backgroundPositionX+" "+t.currentStyle.backgroundPositionY)||"0 0"),es=this.format(e),ba,ea,i,pct,overlap,src;if(bs.indexOf("%")!==-1!==(es.indexOf("%")!==-1)){src=_getStyle(t,"backgroundImage").replace(_urlExp,"");if(src&&src!=="none"){ba=bs.split(" ");ea=es.split(" ");_tempImg.setAttribute("src",src);i=2;while(--i>-1){bs=ba[i];pct=bs.indexOf("%")!==-1;if(pct!==(ea[i].indexOf("%")!==-1)){overlap=i===0?t.offsetWidth-_tempImg.width:t.offsetHeight-_tempImg.height;ba[i]=pct?parseFloat(bs)/100*overlap+"px":parseFloat(bs)/overlap*100+"%"}}bs=ba.join(" ")}}return this.parseComplex(t.style,bs,es,pt,plugin)},formatter:_parsePosition});_registerComplexSpecialProp("backgroundSize",{defaultValue:"0 0",formatter:_parsePosition});_registerComplexSpecialProp("perspective",{defaultValue:"0px",prefix:true});_registerComplexSpecialProp("perspectiveOrigin",{defaultValue:"50% 50%",prefix:true});_registerComplexSpecialProp("transformStyle",{prefix:true});_registerComplexSpecialProp("backfaceVisibility",{prefix:true});_registerComplexSpecialProp("userSelect",{prefix:true});_registerComplexSpecialProp("margin",{parser:_getEdgeParser("marginTop,marginRight,marginBottom,marginLeft")});_registerComplexSpecialProp("padding",{parser:_getEdgeParser("paddingTop,paddingRight,paddingBottom,paddingLeft")});_registerComplexSpecialProp("clip",{defaultValue:"rect(0px,0px,0px,0px)",parser:function(t,e,p,cssp,pt,plugin){var b,cs,delim;if(_ieVers<9){cs=t.currentStyle;delim=_ieVers<8?" ":",";b="rect("+cs.clipTop+delim+cs.clipRight+delim+cs.clipBottom+delim+cs.clipLeft+")";e=this.format(e).split(",").join(delim)}else{b=this.format(_getStyle(t,this.p,_cs,false,this.dflt));e=this.format(e)}return this.parseComplex(t.style,b,e,pt,plugin)}});_registerComplexSpecialProp("textShadow",{defaultValue:"0px 0px 0px #999",color:true,multi:true});_registerComplexSpecialProp("autoRound,strictUnits",{parser:function(t,e,p,cssp,pt){return pt}});_registerComplexSpecialProp("border",{defaultValue:"0px solid #000",parser:function(t,e,p,cssp,pt,plugin){return this.parseComplex(t.style,this.format(_getStyle(t,"borderTopWidth",_cs,false,"0px")+" "+_getStyle(t,"borderTopStyle",_cs,false,"solid")+" "+_getStyle(t,"borderTopColor",_cs,false,"#000")),this.format(e),pt,plugin)},color:true,formatter:function(v){var a=v.split(" ");return a[0]+" "+(a[1]||"solid")+" "+(v.match(_colorExp)||["#000"])[0]}});_registerComplexSpecialProp("borderWidth",{parser:_getEdgeParser("borderTopWidth,borderRightWidth,borderBottomWidth,borderLeftWidth")});_registerComplexSpecialProp("float,cssFloat,styleFloat",{parser:function(t,e,p,cssp,pt,plugin){var s=t.style,prop="cssFloat"in s?"cssFloat":"styleFloat";return new CSSPropTween(s,prop,0,0,pt,-1,p,false,0,s[prop],e)}});var _setIEOpacityRatio=function(v){var t=this.t,filters=t.filter||_getStyle(this.data,"filter")||"",val=this.s+this.c*v|0,skip;if(val===100){if(filters.indexOf("atrix(")===-1&&filters.indexOf("radient(")===-1&&filters.indexOf("oader(")===-1){t.removeAttribute("filter");skip=!_getStyle(this.data,"filter")}else{t.filter=filters.replace(_alphaFilterExp,"");skip=true}}if(!skip){if(this.xn1){t.filter=filters=filters||"alpha(opacity="+val+")"}if(filters.indexOf("pacity")===-1){if(val!==0||!this.xn1){t.filter=filters+" alpha(opacity="+val+")"}}else{t.filter=filters.replace(_opacityExp,"opacity="+val)}}};_registerComplexSpecialProp("opacity,alpha,autoAlpha",{defaultValue:"1",parser:function(t,e,p,cssp,pt,plugin){var b=parseFloat(_getStyle(t,"opacity",_cs,false,"1")),style=t.style,isAutoAlpha=p==="autoAlpha";if(typeof e==="string"&&e.charAt(1)==="="){e=(e.charAt(0)==="-"?-1:1)*parseFloat(e.substr(2))+b}if(isAutoAlpha&&b===1&&_getStyle(t,"visibility",_cs)==="hidden"&&e!==0){b=0}if(_supportsOpacity){pt=new CSSPropTween(style,"opacity",b,e-b,pt)}else{pt=new CSSPropTween(style,"opacity",b*100,(e-b)*100,pt);pt.xn1=isAutoAlpha?1:0;style.zoom=1;pt.type=2;pt.b="alpha(opacity="+pt.s+")";pt.e="alpha(opacity="+(pt.s+pt.c)+")";pt.data=t;pt.plugin=plugin;pt.setRatio=_setIEOpacityRatio}if(isAutoAlpha){pt=new CSSPropTween(style,"visibility",0,0,pt,-1,null,false,0,b!==0?"inherit":"hidden",e===0?"hidden":"inherit");pt.xs0="inherit";cssp._overwriteProps.push(pt.n);cssp._overwriteProps.push(p)}return pt}});var _removeProp=function(s,p){if(p){if(s.removeProperty){if(p.substr(0,2)==="ms"||p.substr(0,6)==="webkit"){p="-"+p}s.removeProperty(p.replace(_capsExp,"-$1").toLowerCase())}else{s.removeAttribute(p)}}},_setClassNameRatio=function(v){this.t._gsClassPT=this;if(v===1||v===0){this.t.setAttribute("class",v===0?this.b:this.e);var mpt=this.data,s=this.t.style;while(mpt){if(!mpt.v){_removeProp(s,mpt.p)}else{s[mpt.p]=mpt.v}mpt=mpt._next}if(v===1&&this.t._gsClassPT===this){this.t._gsClassPT=null}}else if(this.t.getAttribute("class")!==this.e){this.t.setAttribute("class",this.e)}};_registerComplexSpecialProp("className",{parser:function(t,e,p,cssp,pt,plugin,vars){var b=t.getAttribute("class")||"",cssText=t.style.cssText,difData,bs,cnpt,cnptLookup,mpt;pt=cssp._classNamePT=new CSSPropTween(t,p,0,0,pt,2);pt.setRatio=_setClassNameRatio;pt.pr=-11;_hasPriority=true;pt.b=b;bs=_getAllStyles(t,_cs);cnpt=t._gsClassPT;if(cnpt){cnptLookup={};mpt=cnpt.data;while(mpt){cnptLookup[mpt.p]=1;mpt=mpt._next}cnpt.setRatio(1)}t._gsClassPT=pt;pt.e=e.charAt(1)!=="="?e:b.replace(new RegExp("\\s*\\b"+e.substr(2)+"\\b"),"")+(e.charAt(0)==="+"?" "+e.substr(2):"");t.setAttribute("class",pt.e);difData=_cssDif(t,bs,_getAllStyles(t),vars,cnptLookup);t.setAttribute("class",b);pt.data=difData.firstMPT;t.style.cssText=cssText;pt=pt.xfirst=cssp.parse(t,difData.difs,pt,plugin);return pt}});var _setClearPropsRatio=function(v){if(v===1||v===0)if(this.data._totalTime===this.data._totalDuration&&this.data.data!=="isFromStart"){var s=this.t.style,transformParse=_specialProps.transform.parse,a,p,i,clearTransform,transform;if(this.e==="all"){s.cssText="";clearTransform=true}else{a=this.e.split(" ").join("").split(",");i=a.length;while(--i>-1){p=a[i];if(_specialProps[p]){if(_specialProps[p].parse===transformParse){clearTransform=true}else{p=p==="transformOrigin"?_transformOriginProp:_specialProps[p].p}}_removeProp(s,p)}}if(clearTransform){_removeProp(s,_transformProp);transform=this.t._gsTransform;if(transform){if(transform.svg){this.t.removeAttribute("data-svg-origin")}delete this.t._gsTransform}}}};_registerComplexSpecialProp("clearProps",{parser:function(t,e,p,cssp,pt){pt=new CSSPropTween(t,p,0,0,pt,2);pt.setRatio=_setClearPropsRatio;pt.e=e;pt.pr=-10;pt.data=cssp._tween;_hasPriority=true;return pt}});p="bezier,throwProps,physicsProps,physics2D".split(",");i=p.length;while(i--){_registerPluginProp(p[i])}p=CSSPlugin.prototype;p._firstPT=p._lastParsedTransform=p._transform=null;p._onInitTween=function(target,vars,tween){if(!target.nodeType){return false}this._target=target;this._tween=tween;this._vars=vars;_autoRound=vars.autoRound;_hasPriority=false;_suffixMap=vars.suffixMap||CSSPlugin.suffixMap;_cs=_getComputedStyle(target,"");_overwriteProps=this._overwriteProps;var style=target.style,v,pt,pt2,first,last,next,zIndex,tpt,threeD;if(_reqSafariFix)if(style.zIndex===""){v=_getStyle(target,"zIndex",_cs);if(v==="auto"||v===""){this._addLazySet(style,"zIndex",0)}}if(typeof vars==="string"){first=style.cssText;v=_getAllStyles(target,_cs);style.cssText=first+";"+vars;v=_cssDif(target,v,_getAllStyles(target)).difs;if(!_supportsOpacity&&_opacityValExp.test(vars)){v.opacity=parseFloat(RegExp.$1)}vars=v;style.cssText=first}if(vars.className){this._firstPT=pt=_specialProps.className.parse(target,vars.className,"className",this,null,null,vars)}else{this._firstPT=pt=this.parse(target,vars,null)}if(this._transformType){threeD=this._transformType===3;if(!_transformProp){style.zoom=1}else if(_isSafari){_reqSafariFix=true;if(style.zIndex===""){zIndex=_getStyle(target,"zIndex",_cs);if(zIndex==="auto"||zIndex===""){this._addLazySet(style,"zIndex",0)}}if(_isSafariLT6){this._addLazySet(style,"WebkitBackfaceVisibility",this._vars.WebkitBackfaceVisibility||(threeD?"visible":"hidden"))}}pt2=pt;while(pt2&&pt2._next){pt2=pt2._next}tpt=new CSSPropTween(target,"transform",0,0,null,2);this._linkCSSP(tpt,null,pt2);tpt.setRatio=_transformProp?_setTransformRatio:_setIETransformRatio;tpt.data=this._transform||_getTransform(target,_cs,true);tpt.tween=tween;tpt.pr=-1;_overwriteProps.pop()}if(_hasPriority){while(pt){next=pt._next;pt2=first;while(pt2&&pt2.pr>pt.pr){pt2=pt2._next}if(pt._prev=pt2?pt2._prev:last){pt._prev._next=pt}else{first=pt}if(pt._next=pt2){pt2._prev=pt}else{last=pt}pt=next}this._firstPT=first}return true};p.parse=function(target,vars,pt,plugin){var style=target.style,p,sp,bn,en,bs,es,bsfx,esfx,isStr,rel;for(p in vars){es=vars[p];sp=_specialProps[p];if(sp){pt=sp.parse(target,es,p,this,pt,plugin,vars)}else{bs=_getStyle(target,p,_cs)+"";isStr=typeof es==="string";if(p==="color"||p==="fill"||p==="stroke"||p.indexOf("Color")!==-1||isStr&&_rgbhslExp.test(es)){if(!isStr){es=_parseColor(es);es=(es.length>3?"rgba(":"rgb(")+es.join(",")+")"}pt=_parseComplex(style,p,bs,es,true,"transparent",pt,0,plugin)}else if(isStr&&(es.indexOf(" ")!==-1||es.indexOf(",")!==-1)){pt=_parseComplex(style,p,bs,es,true,null,pt,0,plugin)}else{bn=parseFloat(bs);bsfx=bn||bn===0?bs.substr((bn+"").length):"";if(bs===""||bs==="auto"){if(p==="width"||p==="height"){bn=_getDimension(target,p,_cs);bsfx="px"}else if(p==="left"||p==="top"){bn=_calculateOffset(target,p,_cs);bsfx="px"}else{bn=p!=="opacity"?0:1;bsfx=""}}rel=isStr&&es.charAt(1)==="=";if(rel){en=parseInt(es.charAt(0)+"1",10);es=es.substr(2);en*=parseFloat(es);esfx=es.replace(_suffixExp,"")}else{en=parseFloat(es);esfx=isStr?es.replace(_suffixExp,""):""}if(esfx===""){esfx=p in _suffixMap?_suffixMap[p]:bsfx}es=en||en===0?(rel?en+bn:en)+esfx:vars[p];if(bsfx!==esfx)if(esfx!=="")if(en||en===0)if(bn){bn=_convertToPixels(target,p,bn,bsfx);if(esfx==="%"){bn/=_convertToPixels(target,p,100,"%")/100;if(vars.strictUnits!==true){bs=bn+"%"}}else if(esfx==="em"||esfx==="rem"){bn/=_convertToPixels(target,p,1,esfx)}else if(esfx!=="px"){en=_convertToPixels(target,p,en,esfx);esfx="px"}if(rel)if(en||en===0){es=en+bn+esfx}}if(rel){en+=bn}if((bn||bn===0)&&(en||en===0)){pt=new CSSPropTween(style,p,bn,en-bn,pt,0,p,_autoRound!==false&&(esfx==="px"||p==="zIndex"),0,bs,es);pt.xs0=esfx}else if(style[p]===undefined||!es&&(es+""==="NaN"||es==null)){_log("invalid "+p+" tween value: "+vars[p])}else{pt=new CSSPropTween(style,p,en||bn||0,0,pt,-1,p,false,0,bs,es);pt.xs0=es==="none"&&(p==="display"||p.indexOf("Style")!==-1)?bs:es}}}if(plugin)if(pt&&!pt.plugin){pt.plugin=plugin}}return pt};p.setRatio=function(v){var pt=this._firstPT,min=1e-6,val,str,i;if(v===1&&(this._tween._time===this._tween._duration||this._tween._time===0)){while(pt){if(pt.type!==2){if(pt.r&&pt.type!==-1){val=Math.round(pt.s+pt.c);if(!pt.type){pt.t[pt.p]=val+pt.xs0}else if(pt.type===1){i=pt.l;str=pt.xs0+val+pt.xs1;for(i=1;i<pt.l;i++){str+=pt["xn"+i]+pt["xs"+(i+1)]}pt.t[pt.p]=str}}else{pt.t[pt.p]=pt.e}}else{pt.setRatio(v)}pt=pt._next}}else if(v||!(this._tween._time===this._tween._duration||this._tween._time===0)||this._tween._rawPrevTime===-1e-6){while(pt){val=pt.c*v+pt.s;if(pt.r){val=Math.round(val)}else if(val<min)if(val>-min){val=0}if(!pt.type){pt.t[pt.p]=val+pt.xs0}else if(pt.type===1){i=pt.l;if(i===2){pt.t[pt.p]=pt.xs0+val+pt.xs1+pt.xn1+pt.xs2}else if(i===3){pt.t[pt.p]=pt.xs0+val+pt.xs1+pt.xn1+pt.xs2+pt.xn2+pt.xs3}else if(i===4){pt.t[pt.p]=pt.xs0+val+pt.xs1+pt.xn1+pt.xs2+pt.xn2+pt.xs3+pt.xn3+pt.xs4}else if(i===5){pt.t[pt.p]=pt.xs0+val+pt.xs1+pt.xn1+pt.xs2+pt.xn2+pt.xs3+pt.xn3+pt.xs4+pt.xn4+pt.xs5}else{str=pt.xs0+val+pt.xs1;for(i=1;i<pt.l;i++){str+=pt["xn"+i]+pt["xs"+(i+1)]}pt.t[pt.p]=str}}else if(pt.type===-1){pt.t[pt.p]=pt.xs0}else if(pt.setRatio){pt.setRatio(v)}pt=pt._next}}else{while(pt){if(pt.type!==2){pt.t[pt.p]=pt.b}else{pt.setRatio(v)}pt=pt._next}}};p._enableTransforms=function(threeD){this._transform=this._transform||_getTransform(this._target,_cs,true);this._transformType=!(this._transform.svg&&_useSVGTransformAttr)&&(threeD||this._transformType===3)?3:2};var lazySet=function(v){this.t[this.p]=this.e;this.data._linkCSSP(this,this._next,null,true)};p._addLazySet=function(t,p,v){var pt=this._firstPT=new CSSPropTween(t,p,0,0,this._firstPT,2);pt.e=v;pt.setRatio=lazySet;pt.data=this};p._linkCSSP=function(pt,next,prev,remove){if(pt){if(next){next._prev=pt}if(pt._next){pt._next._prev=pt._prev}if(pt._prev){pt._prev._next=pt._next}else if(this._firstPT===pt){this._firstPT=pt._next;remove=true}if(prev){prev._next=pt}else if(!remove&&this._firstPT===null){this._firstPT=pt}pt._next=next;pt._prev=prev}return pt};p._kill=function(lookup){var copy=lookup,pt,p,xfirst;if(lookup.autoAlpha||lookup.alpha){copy={};for(p in lookup){copy[p]=lookup[p]}copy.opacity=1;if(copy.autoAlpha){copy.visibility=1}}if(lookup.className&&(pt=this._classNamePT)){xfirst=pt.xfirst;if(xfirst&&xfirst._prev){this._linkCSSP(xfirst._prev,pt._next,xfirst._prev._prev)}else if(xfirst===this._firstPT){this._firstPT=pt._next}if(pt._next){this._linkCSSP(pt._next,pt._next._next,xfirst._prev)}this._classNamePT=null}return TweenPlugin.prototype._kill.call(this,copy)};var _getChildStyles=function(e,props,targets){var children,i,child,type;if(e.slice){i=e.length;while(--i>-1){_getChildStyles(e[i],props,targets)}return}children=e.childNodes;i=children.length;while(--i>-1){child=children[i];type=child.type;if(child.style){props.push(_getAllStyles(child));if(targets){targets.push(child)}}if((type===1||type===9||type===11)&&child.childNodes.length){_getChildStyles(child,props,targets)}}};CSSPlugin.cascadeTo=function(target,duration,vars){var tween=TweenLite.to(target,duration,vars),results=[tween],b=[],e=[],targets=[],_reservedProps=TweenLite._internals.reservedProps,i,difs,p,from;target=tween._targets||tween.target;_getChildStyles(target,b,targets);tween.render(duration,true,true);_getChildStyles(target,e);tween.render(0,true,true);tween._enabled(true);i=targets.length;while(--i>-1){difs=_cssDif(targets[i],b[i],e[i]);if(difs.firstMPT){difs=difs.difs;for(p in vars){if(_reservedProps[p]){difs[p]=vars[p]}}from={};for(p in difs){from[p]=b[i][p]}results.push(TweenLite.fromTo(targets[i],duration,from,difs))}}return results};TweenPlugin.activate([CSSPlugin]);return CSSPlugin},true);(function(){var RoundPropsPlugin=_gsScope._gsDefine.plugin({propName:"roundProps",version:"1.5",priority:-1,API:2,init:function(target,value,tween){this._tween=tween;return true}}),_roundLinkedList=function(node){while(node){if(!node.f&&!node.blob){node.r=1}node=node._next}},p=RoundPropsPlugin.prototype;p._onInitAllProps=function(){var tween=this._tween,rp=tween.vars.roundProps.join?tween.vars.roundProps:tween.vars.roundProps.split(","),i=rp.length,lookup={},rpt=tween._propLookup.roundProps,prop,pt,next;while(--i>-1){lookup[rp[i]]=1}i=rp.length;while(--i>-1){prop=rp[i];pt=tween._firstPT;while(pt){next=pt._next;if(pt.pg){pt.t._roundProps(lookup,true)}else if(pt.n===prop){if(pt.f===2&&pt.t){_roundLinkedList(pt.t._firstPT)}else{this._add(pt.t,prop,pt.s,pt.c);if(next){next._prev=pt._prev}if(pt._prev){pt._prev._next=next}else if(tween._firstPT===pt){tween._firstPT=next}pt._next=pt._prev=null;tween._propLookup[prop]=rpt}}pt=next}}return false};p._add=function(target,p,s,c){this._addTween(target,p,s,s+c,p,true);this._overwriteProps.push(p)}})();(function(){_gsScope._gsDefine.plugin({propName:"attr",API:2,version:"0.5.0",init:function(target,value,tween){var p;if(typeof target.setAttribute!=="function"){return false}for(p in value){this._addTween(target,"setAttribute",target.getAttribute(p)+"",value[p]+"",p,false,p);this._overwriteProps.push(p)}return true}})})();_gsScope._gsDefine.plugin({propName:"directionalRotation",version:"0.2.1",API:2,init:function(target,value,tween){if(typeof value!=="object"){value={rotation:value}}this.finals={};var cap=value.useRadians===true?Math.PI*2:360,min=1e-6,p,v,start,end,dif,split;for(p in value){if(p!=="useRadians"){split=(value[p]+"").split("_");v=split[0];start=parseFloat(typeof target[p]!=="function"?target[p]:target[p.indexOf("set")||typeof target["get"+p.substr(3)]!=="function"?p:"get"+p.substr(3)]());end=this.finals[p]=typeof v==="string"&&v.charAt(1)==="="?start+parseInt(v.charAt(0)+"1",10)*Number(v.substr(2)):Number(v)||0;dif=end-start;if(split.length){v=split.join("_");if(v.indexOf("short")!==-1){dif=dif%cap;if(dif!==dif%(cap/2)){dif=dif<0?dif+cap:dif-cap}}if(v.indexOf("_cw")!==-1&&dif<0){dif=(dif+cap*9999999999)%cap-(dif/cap|0)*cap}else if(v.indexOf("ccw")!==-1&&dif>0){dif=(dif-cap*9999999999)%cap-(dif/cap|0)*cap}}if(dif>min||dif<-min){this._addTween(target,p,start,start+dif,p);this._overwriteProps.push(p)}}}return true},set:function(ratio){var pt;if(ratio!==1){this._super.setRatio.call(this,ratio)}else{pt=this._firstPT;while(pt){if(pt.f){pt.t[pt.p](this.finals[pt.p])}else{pt.t[pt.p]=this.finals[pt.p]}pt=pt._next}}}})._autoCSS=true;_gsScope._gsDefine("easing.Back",["easing.Ease"],function(Ease){var w=_gsScope.GreenSockGlobals||_gsScope,gs=w.com.greensock,_2PI=Math.PI*2,_HALF_PI=Math.PI/2,_class=gs._class,_create=function(n,f){var C=_class("easing."+n,function(){},true),p=C.prototype=new Ease;p.constructor=C;p.getRatio=f;return C},_easeReg=Ease.register||function(){},_wrap=function(name,EaseOut,EaseIn,EaseInOut,aliases){var C=_class("easing."+name,{easeOut:new EaseOut,easeIn:new EaseIn,easeInOut:new EaseInOut},true);_easeReg(C,name);return C},EasePoint=function(time,value,next){this.t=time;this.v=value;if(next){this.next=next;next.prev=this;this.c=next.v-value;this.gap=next.t-time}},_createBack=function(n,f){var C=_class("easing."+n,function(overshoot){this._p1=overshoot||overshoot===0?overshoot:1.70158;this._p2=this._p1*1.525},true),p=C.prototype=new Ease;p.constructor=C;p.getRatio=f;p.config=function(overshoot){return new C(overshoot)};return C},Back=_wrap("Back",_createBack("BackOut",function(p){return(p=p-1)*p*((this._p1+1)*p+this._p1)+1}),_createBack("BackIn",function(p){return p*p*((this._p1+1)*p-this._p1)}),_createBack("BackInOut",function(p){return(p*=2)<1?.5*p*p*((this._p2+1)*p-this._p2):.5*((p-=2)*p*((this._p2+1)*p+this._p2)+2)})),SlowMo=_class("easing.SlowMo",function(linearRatio,power,yoyoMode){power=power||power===0?power:.7;if(linearRatio==null){linearRatio=.7}else if(linearRatio>1){linearRatio=1}this._p=linearRatio!==1?power:0;this._p1=(1-linearRatio)/2;this._p2=linearRatio;this._p3=this._p1+this._p2;this._calcEnd=yoyoMode===true},true),p=SlowMo.prototype=new Ease,SteppedEase,RoughEase,_createElastic;p.constructor=SlowMo;p.getRatio=function(p){var r=p+(.5-p)*this._p;if(p<this._p1){return this._calcEnd?1-(p=1-p/this._p1)*p:r-(p=1-p/this._p1)*p*p*p*r}else if(p>this._p3){return this._calcEnd?1-(p=(p-this._p3)/this._p1)*p:r+(p-r)*(p=(p-this._p3)/this._p1)*p*p*p}return this._calcEnd?1:r};SlowMo.ease=new SlowMo(.7,.7);p.config=SlowMo.config=function(linearRatio,power,yoyoMode){return new SlowMo(linearRatio,power,yoyoMode)};SteppedEase=_class("easing.SteppedEase",function(steps){steps=steps||1;this._p1=1/steps;this._p2=steps+1},true);p=SteppedEase.prototype=new Ease;p.constructor=SteppedEase;p.getRatio=function(p){if(p<0){p=0}else if(p>=1){p=.999999999}return(this._p2*p>>0)*this._p1};p.config=SteppedEase.config=function(steps){return new SteppedEase(steps)};RoughEase=_class("easing.RoughEase",function(vars){vars=vars||{};var taper=vars.taper||"none",a=[],cnt=0,points=(vars.points||20)|0,i=points,randomize=vars.randomize!==false,clamp=vars.clamp===true,template=vars.template instanceof Ease?vars.template:null,strength=typeof vars.strength==="number"?vars.strength*.4:.4,x,y,bump,invX,obj,pnt;while(--i>-1){x=randomize?Math.random():1/points*i;y=template?template.getRatio(x):x;if(taper==="none"){bump=strength}else if(taper==="out"){invX=1-x;bump=invX*invX*strength}else if(taper==="in"){bump=x*x*strength}else if(x<.5){invX=x*2;bump=invX*invX*.5*strength}else{invX=(1-x)*2;bump=invX*invX*.5*strength}if(randomize){y+=Math.random()*bump-bump*.5}else if(i%2){y+=bump*.5}else{y-=bump*.5}if(clamp){if(y>1){y=1}else if(y<0){y=0}}a[cnt++]={x:x,y:y}}a.sort(function(a,b){return a.x-b.x});pnt=new EasePoint(1,1,null);i=points;while(--i>-1){obj=a[i];pnt=new EasePoint(obj.x,obj.y,pnt)}this._prev=new EasePoint(0,0,pnt.t!==0?pnt:pnt.next)},true);p=RoughEase.prototype=new Ease;p.constructor=RoughEase;p.getRatio=function(p){var pnt=this._prev;if(p>pnt.t){while(pnt.next&&p>=pnt.t){pnt=pnt.next}pnt=pnt.prev}else{while(pnt.prev&&p<=pnt.t){pnt=pnt.prev}}this._prev=pnt;return pnt.v+(p-pnt.t)/pnt.gap*pnt.c};p.config=function(vars){return new RoughEase(vars)};RoughEase.ease=new RoughEase;_wrap("Bounce",_create("BounceOut",function(p){if(p<1/2.75){return 7.5625*p*p}else if(p<2/2.75){return 7.5625*(p-=1.5/2.75)*p+.75}else if(p<2.5/2.75){return 7.5625*(p-=2.25/2.75)*p+.9375}return 7.5625*(p-=2.625/2.75)*p+.984375}),_create("BounceIn",function(p){if((p=1-p)<1/2.75){return 1-7.5625*p*p}else if(p<2/2.75){return 1-(7.5625*(p-=1.5/2.75)*p+.75)}else if(p<2.5/2.75){return 1-(7.5625*(p-=2.25/2.75)*p+.9375)}return 1-(7.5625*(p-=2.625/2.75)*p+.984375)}),_create("BounceInOut",function(p){var invert=p<.5;if(invert){p=1-p*2}else{p=p*2-1}if(p<1/2.75){p=7.5625*p*p}else if(p<2/2.75){p=7.5625*(p-=1.5/2.75)*p+.75}else if(p<2.5/2.75){p=7.5625*(p-=2.25/2.75)*p+.9375}else{p=7.5625*(p-=2.625/2.75)*p+.984375}return invert?(1-p)*.5:p*.5+.5}));_wrap("Circ",_create("CircOut",function(p){return Math.sqrt(1-(p=p-1)*p)}),_create("CircIn",function(p){return-(Math.sqrt(1-p*p)-1)}),_create("CircInOut",function(p){return(p*=2)<1?-.5*(Math.sqrt(1-p*p)-1):.5*(Math.sqrt(1-(p-=2)*p)+1)}));_createElastic=function(n,f,def){var C=_class("easing."+n,function(amplitude,period){this._p1=amplitude>=1?amplitude:1;this._p2=(period||def)/(amplitude<1?amplitude:1);this._p3=this._p2/_2PI*(Math.asin(1/this._p1)||0);this._p2=_2PI/this._p2},true),p=C.prototype=new Ease;p.constructor=C;p.getRatio=f;p.config=function(amplitude,period){return new C(amplitude,period)};return C};_wrap("Elastic",_createElastic("ElasticOut",function(p){return this._p1*Math.pow(2,-10*p)*Math.sin((p-this._p3)*this._p2)+1},.3),_createElastic("ElasticIn",function(p){return-(this._p1*Math.pow(2,10*(p-=1))*Math.sin((p-this._p3)*this._p2))},.3),_createElastic("ElasticInOut",function(p){return(p*=2)<1?-.5*(this._p1*Math.pow(2,10*(p-=1))*Math.sin((p-this._p3)*this._p2)):this._p1*Math.pow(2,-10*(p-=1))*Math.sin((p-this._p3)*this._p2)*.5+1},.45));_wrap("Expo",_create("ExpoOut",function(p){return 1-Math.pow(2,-10*p)}),_create("ExpoIn",function(p){return Math.pow(2,10*(p-1))-.001}),_create("ExpoInOut",function(p){return(p*=2)<1?.5*Math.pow(2,10*(p-1)):.5*(2-Math.pow(2,-10*(p-1)))}));_wrap("Sine",_create("SineOut",function(p){return Math.sin(p*_HALF_PI)}),_create("SineIn",function(p){return-Math.cos(p*_HALF_PI)+1}),_create("SineInOut",function(p){return-.5*(Math.cos(Math.PI*p)-1)}));_class("easing.EaseLookup",{find:function(s){return Ease.map[s]}},true);_easeReg(w.SlowMo,"SlowMo","ease,");_easeReg(RoughEase,"RoughEase","ease,");_easeReg(SteppedEase,"SteppedEase","ease,");return Back},true)});if(_gsScope._gsDefine){_gsScope._gsQueue.pop()()}(function(window,moduleName){"use strict";var _globals=window.GreenSockGlobals=window.GreenSockGlobals||window;if(_globals.TweenLite){return}var _namespace=function(ns){var a=ns.split("."),p=_globals,i;for(i=0;i<a.length;i++){p[a[i]]=p=p[a[i]]||{}}return p},gs=_namespace("com.greensock"),_tinyNum=1e-10,_slice=function(a){var b=[],l=a.length,i;for(i=0;i!==l;b.push(a[i++])){}return b},_emptyFunc=function(){},_isArray=function(){var toString=Object.prototype.toString,array=toString.call([]);return function(obj){return obj!=null&&(obj instanceof Array||typeof obj==="object"&&!!obj.push&&toString.call(obj)===array)}}(),a,i,p,_ticker,_tickerActive,_defLookup={},Definition=function(ns,dependencies,func,global){this.sc=_defLookup[ns]?_defLookup[ns].sc:[];_defLookup[ns]=this;this.gsClass=null;this.func=func;var _classes=[];this.check=function(init){var i=dependencies.length,missing=i,cur,a,n,cl,hasModule;while(--i>-1){if((cur=_defLookup[dependencies[i]]||new Definition(dependencies[i],[])).gsClass){_classes[i]=cur.gsClass;missing--}else if(init){cur.sc.push(this)}}if(missing===0&&func){a=("com.greensock."+ns).split(".");n=a.pop();cl=_namespace(a.join("."))[n]=this.gsClass=func.apply(func,_classes);if(global){_globals[n]=cl;hasModule=typeof module!=="undefined"&&module.exports;if(!hasModule&&typeof define==="function"&&define.amd){define((window.GreenSockAMDPath?window.GreenSockAMDPath+"/":"")+ns.split(".").pop(),[],function(){return cl})}else if(ns===moduleName&&hasModule){module.exports=cl}}for(i=0;i<this.sc.length;i++){this.sc[i].check()}}};this.check(true)},_gsDefine=window._gsDefine=function(ns,dependencies,func,global){return new Definition(ns,dependencies,func,global)},_class=gs._class=function(ns,func,global){func=func||function(){};_gsDefine(ns,[],function(){return func},global);return func};_gsDefine.globals=_globals;var _baseParams=[0,0,1,1],_blankArray=[],Ease=_class("easing.Ease",function(func,extraParams,type,power){this._func=func;this._type=type||0;this._power=power||0;this._params=extraParams?_baseParams.concat(extraParams):_baseParams},true),_easeMap=Ease.map={},_easeReg=Ease.register=function(ease,names,types,create){var na=names.split(","),i=na.length,ta=(types||"easeIn,easeOut,easeInOut").split(","),e,name,j,type;while(--i>-1){name=na[i];e=create?_class("easing."+name,null,true):gs.easing[name]||{};j=ta.length;while(--j>-1){type=ta[j];_easeMap[name+"."+type]=_easeMap[type+name]=e[type]=ease.getRatio?ease:ease[type]||new ease}}};p=Ease.prototype;p._calcEnd=false;p.getRatio=function(p){if(this._func){this._params[0]=p;return this._func.apply(null,this._params)}var t=this._type,pw=this._power,r=t===1?1-p:t===2?p:p<.5?p*2:(1-p)*2;if(pw===1){r*=r}else if(pw===2){r*=r*r}else if(pw===3){r*=r*r*r}else if(pw===4){r*=r*r*r*r}return t===1?1-r:t===2?r:p<.5?r/2:1-r/2};a=["Linear","Quad","Cubic","Quart","Quint,Strong"];i=a.length;while(--i>-1){p=a[i]+",Power"+i;_easeReg(new Ease(null,null,1,i),p,"easeOut",true);_easeReg(new Ease(null,null,2,i),p,"easeIn"+(i===0?",easeNone":""));_easeReg(new Ease(null,null,3,i),p,"easeInOut")}_easeMap.linear=gs.easing.Linear.easeIn;_easeMap.swing=gs.easing.Quad.easeInOut;var EventDispatcher=_class("events.EventDispatcher",function(target){this._listeners={};this._eventTarget=target||this});p=EventDispatcher.prototype;p.addEventListener=function(type,callback,scope,useParam,priority){priority=priority||0;var list=this._listeners[type],index=0,listener,i;if(list==null){this._listeners[type]=list=[]}i=list.length;while(--i>-1){listener=list[i];if(listener.c===callback&&listener.s===scope){list.splice(i,1)}else if(index===0&&listener.pr<priority){index=i+1}}list.splice(index,0,{c:callback,s:scope,up:useParam,pr:priority});if(this===_ticker&&!_tickerActive){_ticker.wake()}};p.removeEventListener=function(type,callback){var list=this._listeners[type],i;if(list){i=list.length;while(--i>-1){if(list[i].c===callback){list.splice(i,1);return}}}};p.dispatchEvent=function(type){var list=this._listeners[type],i,t,listener;if(list){i=list.length;t=this._eventTarget;while(--i>-1){listener=list[i];if(listener){if(listener.up){listener.c.call(listener.s||t,{type:type,target:t})}else{listener.c.call(listener.s||t)}}}}};var _reqAnimFrame=window.requestAnimationFrame,_cancelAnimFrame=window.cancelAnimationFrame,_getTime=Date.now||function(){return(new Date).getTime()},_lastUpdate=_getTime();a=["ms","moz","webkit","o"];i=a.length;while(--i>-1&&!_reqAnimFrame){_reqAnimFrame=window[a[i]+"RequestAnimationFrame"];_cancelAnimFrame=window[a[i]+"CancelAnimationFrame"]||window[a[i]+"CancelRequestAnimationFrame"]}_class("Ticker",function(fps,useRAF){var _self=this,_startTime=_getTime(),_useRAF=useRAF!==false&&_reqAnimFrame,_lagThreshold=500,_adjustedLag=33,_tickWord="tick",_fps,_req,_id,_gap,_nextTime,_tick=function(manual){var elapsed=_getTime()-_lastUpdate,overlap,dispatch;if(elapsed>_lagThreshold){_startTime+=elapsed-_adjustedLag}_lastUpdate+=elapsed;_self.time=(_lastUpdate-_startTime)/1e3;overlap=_self.time-_nextTime;if(!_fps||overlap>0||manual===true){_self.frame++;_nextTime+=overlap+(overlap>=_gap?.004:_gap-overlap);dispatch=true}if(manual!==true){_id=_req(_tick)}if(dispatch){_self.dispatchEvent(_tickWord)}};EventDispatcher.call(_self);_self.time=_self.frame=0;_self.tick=function(){_tick(true)};_self.lagSmoothing=function(threshold,adjustedLag){_lagThreshold=threshold||1/_tinyNum;_adjustedLag=Math.min(adjustedLag,_lagThreshold,0)};_self.sleep=function(){if(_id==null){return}if(!_useRAF||!_cancelAnimFrame){clearTimeout(_id)}else{_cancelAnimFrame(_id)}_req=_emptyFunc;_id=null;if(_self===_ticker){_tickerActive=false}};_self.wake=function(){if(_id!==null){_self.sleep()}else if(_self.frame>10){_lastUpdate=_getTime()-_lagThreshold+5}_req=_fps===0?_emptyFunc:!_useRAF||!_reqAnimFrame?function(f){return setTimeout(f,(_nextTime-_self.time)*1e3+1|0)}:_reqAnimFrame;if(_self===_ticker){_tickerActive=true}_tick(2)};_self.fps=function(value){if(!arguments.length){return _fps}_fps=value;_gap=1/(_fps||60);_nextTime=this.time+_gap;_self.wake()};_self.useRAF=function(value){if(!arguments.length){return _useRAF}_self.sleep();_useRAF=value;_self.fps(_fps)};_self.fps(fps);setTimeout(function(){if(_useRAF&&_self.frame<5){_self.useRAF(false)}},1500)});p=gs.Ticker.prototype=new gs.events.EventDispatcher;p.constructor=gs.Ticker;var Animation=_class("core.Animation",function(duration,vars){this.vars=vars=vars||{};this._duration=this._totalDuration=duration||0;
        this._delay=Number(vars.delay)||0;this._timeScale=1;this._active=vars.immediateRender===true;this.data=vars.data;this._reversed=vars.reversed===true;if(!_rootTimeline){return}if(!_tickerActive){_ticker.wake()}var tl=this.vars.useFrames?_rootFramesTimeline:_rootTimeline;tl.add(this,tl._time);if(this.vars.paused){this.paused(true)}});_ticker=Animation.ticker=new gs.Ticker;p=Animation.prototype;p._dirty=p._gc=p._initted=p._paused=false;p._totalTime=p._time=0;p._rawPrevTime=-1;p._next=p._last=p._onUpdate=p._timeline=p.timeline=null;p._paused=false;var _checkTimeout=function(){if(_tickerActive&&_getTime()-_lastUpdate>2e3){_ticker.wake()}setTimeout(_checkTimeout,2e3)};_checkTimeout();p.play=function(from,suppressEvents){if(from!=null){this.seek(from,suppressEvents)}return this.reversed(false).paused(false)};p.pause=function(atTime,suppressEvents){if(atTime!=null){this.seek(atTime,suppressEvents)}return this.paused(true)};p.resume=function(from,suppressEvents){if(from!=null){this.seek(from,suppressEvents)}return this.paused(false)};p.seek=function(time,suppressEvents){return this.totalTime(Number(time),suppressEvents!==false)};p.restart=function(includeDelay,suppressEvents){return this.reversed(false).paused(false).totalTime(includeDelay?-this._delay:0,suppressEvents!==false,true)};p.reverse=function(from,suppressEvents){if(from!=null){this.seek(from||this.totalDuration(),suppressEvents)}return this.reversed(true).paused(false)};p.render=function(time,suppressEvents,force){};p.invalidate=function(){this._time=this._totalTime=0;this._initted=this._gc=false;this._rawPrevTime=-1;if(this._gc||!this.timeline){this._enabled(true)}return this};p.isActive=function(){var tl=this._timeline,startTime=this._startTime,rawTime;return!tl||!this._gc&&!this._paused&&tl.isActive()&&(rawTime=tl.rawTime())>=startTime&&rawTime<startTime+this.totalDuration()/this._timeScale};p._enabled=function(enabled,ignoreTimeline){if(!_tickerActive){_ticker.wake()}this._gc=!enabled;this._active=this.isActive();if(ignoreTimeline!==true){if(enabled&&!this.timeline){this._timeline.add(this,this._startTime-this._delay)}else if(!enabled&&this.timeline){this._timeline._remove(this,true)}}return false};p._kill=function(vars,target){return this._enabled(false,false)};p.kill=function(vars,target){this._kill(vars,target);return this};p._uncache=function(includeSelf){var tween=includeSelf?this:this.timeline;while(tween){tween._dirty=true;tween=tween.timeline}return this};p._swapSelfInParams=function(params){var i=params.length,copy=params.concat();while(--i>-1){if(params[i]==="{self}"){copy[i]=this}}return copy};p._callback=function(type){var v=this.vars;v[type].apply(v[type+"Scope"]||v.callbackScope||this,v[type+"Params"]||_blankArray)};p.eventCallback=function(type,callback,params,scope){if((type||"").substr(0,2)==="on"){var v=this.vars;if(arguments.length===1){return v[type]}if(callback==null){delete v[type]}else{v[type]=callback;v[type+"Params"]=_isArray(params)&&params.join("").indexOf("{self}")!==-1?this._swapSelfInParams(params):params;v[type+"Scope"]=scope}if(type==="onUpdate"){this._onUpdate=callback}}return this};p.delay=function(value){if(!arguments.length){return this._delay}if(this._timeline.smoothChildTiming){this.startTime(this._startTime+value-this._delay)}this._delay=value;return this};p.duration=function(value){if(!arguments.length){this._dirty=false;return this._duration}this._duration=this._totalDuration=value;this._uncache(true);if(this._timeline.smoothChildTiming)if(this._time>0)if(this._time<this._duration)if(value!==0){this.totalTime(this._totalTime*(value/this._duration),true)}return this};p.totalDuration=function(value){this._dirty=false;return!arguments.length?this._totalDuration:this.duration(value)};p.time=function(value,suppressEvents){if(!arguments.length){return this._time}if(this._dirty){this.totalDuration()}return this.totalTime(value>this._duration?this._duration:value,suppressEvents)};p.totalTime=function(time,suppressEvents,uncapped){if(!_tickerActive){_ticker.wake()}if(!arguments.length){return this._totalTime}if(this._timeline){if(time<0&&!uncapped){time+=this.totalDuration()}if(this._timeline.smoothChildTiming){if(this._dirty){this.totalDuration()}var totalDuration=this._totalDuration,tl=this._timeline;if(time>totalDuration&&!uncapped){time=totalDuration}this._startTime=(this._paused?this._pauseTime:tl._time)-(!this._reversed?time:totalDuration-time)/this._timeScale;if(!tl._dirty){this._uncache(false)}if(tl._timeline){while(tl._timeline){if(tl._timeline._time!==(tl._startTime+tl._totalTime)/tl._timeScale){tl.totalTime(tl._totalTime,true)}tl=tl._timeline}}}if(this._gc){this._enabled(true,false)}if(this._totalTime!==time||this._duration===0){if(_lazyTweens.length){_lazyRender()}this.render(time,suppressEvents,false);if(_lazyTweens.length){_lazyRender()}}}return this};p.progress=p.totalProgress=function(value,suppressEvents){var duration=this.duration();return!arguments.length?duration?this._time/duration:this.ratio:this.totalTime(duration*value,suppressEvents)};p.startTime=function(value){if(!arguments.length){return this._startTime}if(value!==this._startTime){this._startTime=value;if(this.timeline)if(this.timeline._sortChildren){this.timeline.add(this,value-this._delay)}}return this};p.endTime=function(includeRepeats){return this._startTime+(includeRepeats!=false?this.totalDuration():this.duration())/this._timeScale};p.timeScale=function(value){if(!arguments.length){return this._timeScale}value=value||_tinyNum;if(this._timeline&&this._timeline.smoothChildTiming){var pauseTime=this._pauseTime,t=pauseTime||pauseTime===0?pauseTime:this._timeline.totalTime();this._startTime=t-(t-this._startTime)*this._timeScale/value}this._timeScale=value;return this._uncache(false)};p.reversed=function(value){if(!arguments.length){return this._reversed}if(value!=this._reversed){this._reversed=value;this.totalTime(this._timeline&&!this._timeline.smoothChildTiming?this.totalDuration()-this._totalTime:this._totalTime,true)}return this};p.paused=function(value){if(!arguments.length){return this._paused}var tl=this._timeline,raw,elapsed;if(value!=this._paused)if(tl){if(!_tickerActive&&!value){_ticker.wake()}raw=tl.rawTime();elapsed=raw-this._pauseTime;if(!value&&tl.smoothChildTiming){this._startTime+=elapsed;this._uncache(false)}this._pauseTime=value?raw:null;this._paused=value;this._active=this.isActive();if(!value&&elapsed!==0&&this._initted&&this.duration()){raw=tl.smoothChildTiming?this._totalTime:(raw-this._startTime)/this._timeScale;this.render(raw,raw===this._totalTime,true)}}if(this._gc&&!value){this._enabled(true,false)}return this};var SimpleTimeline=_class("core.SimpleTimeline",function(vars){Animation.call(this,0,vars);this.autoRemoveChildren=this.smoothChildTiming=true});p=SimpleTimeline.prototype=new Animation;p.constructor=SimpleTimeline;p.kill()._gc=false;p._first=p._last=p._recent=null;p._sortChildren=false;p.add=p.insert=function(child,position,align,stagger){var prevTween,st;child._startTime=Number(position||0)+child._delay;if(child._paused)if(this!==child._timeline){child._pauseTime=child._startTime+(this.rawTime()-child._startTime)/child._timeScale}if(child.timeline){child.timeline._remove(child,true)}child.timeline=child._timeline=this;if(child._gc){child._enabled(true,true)}prevTween=this._last;if(this._sortChildren){st=child._startTime;while(prevTween&&prevTween._startTime>st){prevTween=prevTween._prev}}if(prevTween){child._next=prevTween._next;prevTween._next=child}else{child._next=this._first;this._first=child}if(child._next){child._next._prev=child}else{this._last=child}child._prev=prevTween;this._recent=child;if(this._timeline){this._uncache(true)}return this};p._remove=function(tween,skipDisable){if(tween.timeline===this){if(!skipDisable){tween._enabled(false,true)}if(tween._prev){tween._prev._next=tween._next}else if(this._first===tween){this._first=tween._next}if(tween._next){tween._next._prev=tween._prev}else if(this._last===tween){this._last=tween._prev}tween._next=tween._prev=tween.timeline=null;if(tween===this._recent){this._recent=this._last}if(this._timeline){this._uncache(true)}}return this};p.render=function(time,suppressEvents,force){var tween=this._first,next;this._totalTime=this._time=this._rawPrevTime=time;while(tween){next=tween._next;if(tween._active||time>=tween._startTime&&!tween._paused){if(!tween._reversed){tween.render((time-tween._startTime)*tween._timeScale,suppressEvents,force)}else{tween.render((!tween._dirty?tween._totalDuration:tween.totalDuration())-(time-tween._startTime)*tween._timeScale,suppressEvents,force)}}tween=next}};p.rawTime=function(){if(!_tickerActive){_ticker.wake()}return this._totalTime};var TweenLite=_class("TweenLite",function(target,duration,vars){Animation.call(this,duration,vars);this.render=TweenLite.prototype.render;if(target==null){throw"Cannot tween a null target."}this.target=target=typeof target!=="string"?target:TweenLite.selector(target)||target;var isSelector=target.jquery||target.length&&target!==window&&target[0]&&(target[0]===window||target[0].nodeType&&target[0].style&&!target.nodeType),overwrite=this.vars.overwrite,i,targ,targets;this._overwrite=overwrite=overwrite==null?_overwriteLookup[TweenLite.defaultOverwrite]:typeof overwrite==="number"?overwrite>>0:_overwriteLookup[overwrite];if((isSelector||target instanceof Array||target.push&&_isArray(target))&&typeof target[0]!=="number"){this._targets=targets=_slice(target);this._propLookup=[];this._siblings=[];for(i=0;i<targets.length;i++){targ=targets[i];if(!targ){targets.splice(i--,1);continue}else if(typeof targ==="string"){targ=targets[i--]=TweenLite.selector(targ);if(typeof targ==="string"){targets.splice(i+1,1)}continue}else if(targ.length&&targ!==window&&targ[0]&&(targ[0]===window||targ[0].nodeType&&targ[0].style&&!targ.nodeType)){targets.splice(i--,1);this._targets=targets=targets.concat(_slice(targ));continue}this._siblings[i]=_register(targ,this,false);if(overwrite===1)if(this._siblings[i].length>1){_applyOverwrite(targ,this,null,1,this._siblings[i])}}}else{this._propLookup={};this._siblings=_register(target,this,false);if(overwrite===1)if(this._siblings.length>1){_applyOverwrite(target,this,null,1,this._siblings)}}if(this.vars.immediateRender||duration===0&&this._delay===0&&this.vars.immediateRender!==false){this._time=-_tinyNum;this.render(-this._delay)}},true),_isSelector=function(v){return v&&v.length&&v!==window&&v[0]&&(v[0]===window||v[0].nodeType&&v[0].style&&!v.nodeType)},_autoCSS=function(vars,target){var css={},p;for(p in vars){if(!_reservedProps[p]&&(!(p in target)||p==="transform"||p==="x"||p==="y"||p==="width"||p==="height"||p==="className"||p==="border")&&(!_plugins[p]||_plugins[p]&&_plugins[p]._autoCSS)){css[p]=vars[p];delete vars[p]}}vars.css=css};p=TweenLite.prototype=new Animation;p.constructor=TweenLite;p.kill()._gc=false;p.ratio=0;p._firstPT=p._targets=p._overwrittenProps=p._startAt=null;p._notifyPluginsOfEnabled=p._lazy=false;TweenLite.version="1.18.0";TweenLite.defaultEase=p._ease=new Ease(null,null,1,1);TweenLite.defaultOverwrite="auto";TweenLite.ticker=_ticker;TweenLite.autoSleep=120;TweenLite.lagSmoothing=function(threshold,adjustedLag){_ticker.lagSmoothing(threshold,adjustedLag)};TweenLite.selector=window.$||window.jQuery||function(e){var selector=window.$||window.jQuery;if(selector){TweenLite.selector=selector;return selector(e)}return typeof document==="undefined"?e:document.querySelectorAll?document.querySelectorAll(e):document.getElementById(e.charAt(0)==="#"?e.substr(1):e)};var _lazyTweens=[],_lazyLookup={},_numbersExp=/(?:(-|-=|\+=)?\d*\.?\d*(?:e[\-+]?\d+)?)[0-9]/gi,_setRatio=function(v){var pt=this._firstPT,min=1e-6,val;while(pt){val=!pt.blob?pt.c*v+pt.s:v?this.join(""):this.start;if(pt.r){val=Math.round(val)}else if(val<min)if(val>-min){val=0}if(!pt.f){pt.t[pt.p]=val}else if(pt.fp){pt.t[pt.p](pt.fp,val)}else{pt.t[pt.p](val)}pt=pt._next}},_blobDif=function(start,end,filter,pt){var a=[start,end],charIndex=0,s="",color=0,startNums,endNums,num,i,l,nonNumbers,currentNum;a.start=start;if(filter){filter(a);start=a[0];end=a[1]}a.length=0;startNums=start.match(_numbersExp)||[];endNums=end.match(_numbersExp)||[];if(pt){pt._next=null;pt.blob=1;a._firstPT=pt}l=endNums.length;for(i=0;i<l;i++){currentNum=endNums[i];nonNumbers=end.substr(charIndex,end.indexOf(currentNum,charIndex)-charIndex);s+=nonNumbers||!i?nonNumbers:",";charIndex+=nonNumbers.length;if(color){color=(color+1)%5}else if(nonNumbers.substr(-5)==="rgba("){color=1}if(currentNum===startNums[i]||startNums.length<=i){s+=currentNum}else{if(s){a.push(s);s=""}num=parseFloat(startNums[i]);a.push(num);a._firstPT={_next:a._firstPT,t:a,p:a.length-1,s:num,c:(currentNum.charAt(1)==="="?parseInt(currentNum.charAt(0)+"1",10)*parseFloat(currentNum.substr(2)):parseFloat(currentNum)-num)||0,f:0,r:color&&color<4}}charIndex+=currentNum.length}s+=end.substr(charIndex);if(s){a.push(s)}a.setRatio=_setRatio;return a},_addPropTween=function(target,prop,start,end,overwriteProp,round,funcParam,stringFilter){var s=start==="get"?target[prop]:start,type=typeof target[prop],isRelative=typeof end==="string"&&end.charAt(1)==="=",pt={t:target,p:prop,s:s,f:type==="function",pg:0,n:overwriteProp||prop,r:round,pr:0,c:isRelative?parseInt(end.charAt(0)+"1",10)*parseFloat(end.substr(2)):parseFloat(end)-s||0},blob,getterName;if(type!=="number"){if(type==="function"&&start==="get"){getterName=prop.indexOf("set")||typeof target["get"+prop.substr(3)]!=="function"?prop:"get"+prop.substr(3);pt.s=s=funcParam?target[getterName](funcParam):target[getterName]()}if(typeof s==="string"&&(funcParam||isNaN(s))){pt.fp=funcParam;blob=_blobDif(s,end,stringFilter||TweenLite.defaultStringFilter,pt);pt={t:blob,p:"setRatio",s:0,c:1,f:2,pg:0,n:overwriteProp||prop,pr:0}}else if(!isRelative){pt.c=parseFloat(end)-parseFloat(s)||0}}if(pt.c){if(pt._next=this._firstPT){pt._next._prev=pt}this._firstPT=pt;return pt}},_internals=TweenLite._internals={isArray:_isArray,isSelector:_isSelector,lazyTweens:_lazyTweens,blobDif:_blobDif},_plugins=TweenLite._plugins={},_tweenLookup=_internals.tweenLookup={},_tweenLookupNum=0,_reservedProps=_internals.reservedProps={ease:1,delay:1,overwrite:1,onComplete:1,onCompleteParams:1,onCompleteScope:1,useFrames:1,runBackwards:1,startAt:1,onUpdate:1,onUpdateParams:1,onUpdateScope:1,onStart:1,onStartParams:1,onStartScope:1,onReverseComplete:1,onReverseCompleteParams:1,onReverseCompleteScope:1,onRepeat:1,onRepeatParams:1,onRepeatScope:1,easeParams:1,yoyo:1,immediateRender:1,repeat:1,repeatDelay:1,data:1,paused:1,reversed:1,autoCSS:1,lazy:1,onOverwrite:1,callbackScope:1,stringFilter:1},_overwriteLookup={none:0,all:1,auto:2,concurrent:3,allOnStart:4,preexisting:5,"true":1,"false":0},_rootFramesTimeline=Animation._rootFramesTimeline=new SimpleTimeline,_rootTimeline=Animation._rootTimeline=new SimpleTimeline,_nextGCFrame=30,_lazyRender=_internals.lazyRender=function(){var i=_lazyTweens.length,tween;_lazyLookup={};while(--i>-1){tween=_lazyTweens[i];if(tween&&tween._lazy!==false){tween.render(tween._lazy[0],tween._lazy[1],true);tween._lazy=false}}_lazyTweens.length=0};_rootTimeline._startTime=_ticker.time;_rootFramesTimeline._startTime=_ticker.frame;_rootTimeline._active=_rootFramesTimeline._active=true;setTimeout(_lazyRender,1);Animation._updateRoot=TweenLite.render=function(){var i,a,p;if(_lazyTweens.length){_lazyRender()}_rootTimeline.render((_ticker.time-_rootTimeline._startTime)*_rootTimeline._timeScale,false,false);_rootFramesTimeline.render((_ticker.frame-_rootFramesTimeline._startTime)*_rootFramesTimeline._timeScale,false,false);if(_lazyTweens.length){_lazyRender()}if(_ticker.frame>=_nextGCFrame){_nextGCFrame=_ticker.frame+(parseInt(TweenLite.autoSleep,10)||120);for(p in _tweenLookup){a=_tweenLookup[p].tweens;i=a.length;while(--i>-1){if(a[i]._gc){a.splice(i,1)}}if(a.length===0){delete _tweenLookup[p]}}p=_rootTimeline._first;if(!p||p._paused)if(TweenLite.autoSleep&&!_rootFramesTimeline._first&&_ticker._listeners.tick.length===1){while(p&&p._paused){p=p._next}if(!p){_ticker.sleep()}}}};_ticker.addEventListener("tick",Animation._updateRoot);var _register=function(target,tween,scrub){var id=target._gsTweenID,a,i;if(!_tweenLookup[id||(target._gsTweenID=id="t"+_tweenLookupNum++)]){_tweenLookup[id]={target:target,tweens:[]}}if(tween){a=_tweenLookup[id].tweens;a[i=a.length]=tween;if(scrub){while(--i>-1){if(a[i]===tween){a.splice(i,1)}}}}return _tweenLookup[id].tweens},_onOverwrite=function(overwrittenTween,overwritingTween,target,killedProps){var func=overwrittenTween.vars.onOverwrite,r1,r2;if(func){r1=func(overwrittenTween,overwritingTween,target,killedProps)}func=TweenLite.onOverwrite;if(func){r2=func(overwrittenTween,overwritingTween,target,killedProps)}return r1!==false&&r2!==false},_applyOverwrite=function(target,tween,props,mode,siblings){var i,changed,curTween,l;if(mode===1||mode>=4){l=siblings.length;for(i=0;i<l;i++){if((curTween=siblings[i])!==tween){if(!curTween._gc){if(curTween._kill(null,target,tween)){changed=true}}}else if(mode===5){break}}return changed}var startTime=tween._startTime+_tinyNum,overlaps=[],oCount=0,zeroDur=tween._duration===0,globalStart;i=siblings.length;while(--i>-1){if((curTween=siblings[i])===tween||curTween._gc||curTween._paused){}else if(curTween._timeline!==tween._timeline){globalStart=globalStart||_checkOverlap(tween,0,zeroDur);if(_checkOverlap(curTween,globalStart,zeroDur)===0){overlaps[oCount++]=curTween}}else if(curTween._startTime<=startTime)if(curTween._startTime+curTween.totalDuration()/curTween._timeScale>startTime)if(!((zeroDur||!curTween._initted)&&startTime-curTween._startTime<=2e-10)){overlaps[oCount++]=curTween}}i=oCount;while(--i>-1){curTween=overlaps[i];if(mode===2)if(curTween._kill(props,target,tween)){changed=true}if(mode!==2||!curTween._firstPT&&curTween._initted){if(mode!==2&&!_onOverwrite(curTween,tween)){continue}if(curTween._enabled(false,false)){changed=true}}}return changed},_checkOverlap=function(tween,reference,zeroDur){var tl=tween._timeline,ts=tl._timeScale,t=tween._startTime;while(tl._timeline){t+=tl._startTime;ts*=tl._timeScale;if(tl._paused){return-100}tl=tl._timeline}t/=ts;return t>reference?t-reference:zeroDur&&t===reference||!tween._initted&&t-reference<2*_tinyNum?_tinyNum:(t+=tween.totalDuration()/tween._timeScale/ts)>reference+_tinyNum?0:t-reference-_tinyNum};p._init=function(){var v=this.vars,op=this._overwrittenProps,dur=this._duration,immediate=!!v.immediateRender,ease=v.ease,i,initPlugins,pt,p,startVars;if(v.startAt){if(this._startAt){this._startAt.render(-1,true);this._startAt.kill()}startVars={};for(p in v.startAt){startVars[p]=v.startAt[p]}startVars.overwrite=false;startVars.immediateRender=true;startVars.lazy=immediate&&v.lazy!==false;startVars.startAt=startVars.delay=null;this._startAt=TweenLite.to(this.target,0,startVars);if(immediate){if(this._time>0){this._startAt=null}else if(dur!==0){return}}}else if(v.runBackwards&&dur!==0){if(this._startAt){this._startAt.render(-1,true);this._startAt.kill();this._startAt=null}else{if(this._time!==0){immediate=false}pt={};for(p in v){if(!_reservedProps[p]||p==="autoCSS"){pt[p]=v[p]}}pt.overwrite=0;pt.data="isFromStart";pt.lazy=immediate&&v.lazy!==false;pt.immediateRender=immediate;this._startAt=TweenLite.to(this.target,0,pt);if(!immediate){this._startAt._init();this._startAt._enabled(false);if(this.vars.immediateRender){this._startAt=null}}else if(this._time===0){return}}}this._ease=ease=!ease?TweenLite.defaultEase:ease instanceof Ease?ease:typeof ease==="function"?new Ease(ease,v.easeParams):_easeMap[ease]||TweenLite.defaultEase;if(v.easeParams instanceof Array&&ease.config){this._ease=ease.config.apply(ease,v.easeParams)}this._easeType=this._ease._type;this._easePower=this._ease._power;this._firstPT=null;if(this._targets){i=this._targets.length;while(--i>-1){if(this._initProps(this._targets[i],this._propLookup[i]={},this._siblings[i],op?op[i]:null)){initPlugins=true}}}else{initPlugins=this._initProps(this.target,this._propLookup,this._siblings,op)}if(initPlugins){TweenLite._onPluginEvent("_onInitAllProps",this)}if(op)if(!this._firstPT)if(typeof this.target!=="function"){this._enabled(false,false)}if(v.runBackwards){pt=this._firstPT;while(pt){pt.s+=pt.c;pt.c=-pt.c;pt=pt._next}}this._onUpdate=v.onUpdate;this._initted=true};p._initProps=function(target,propLookup,siblings,overwrittenProps){var p,i,initPlugins,plugin,pt,v;if(target==null){return false}if(_lazyLookup[target._gsTweenID]){_lazyRender()}if(!this.vars.css)if(target.style)if(target!==window&&target.nodeType)if(_plugins.css)if(this.vars.autoCSS!==false){_autoCSS(this.vars,target)}for(p in this.vars){v=this.vars[p];if(_reservedProps[p]){if(v)if(v instanceof Array||v.push&&_isArray(v))if(v.join("").indexOf("{self}")!==-1){this.vars[p]=v=this._swapSelfInParams(v,this)}}else if(_plugins[p]&&(plugin=new _plugins[p])._onInitTween(target,this.vars[p],this)){this._firstPT=pt={_next:this._firstPT,t:plugin,p:"setRatio",s:0,c:1,f:1,n:p,pg:1,pr:plugin._priority};i=plugin._overwriteProps.length;while(--i>-1){propLookup[plugin._overwriteProps[i]]=this._firstPT}if(plugin._priority||plugin._onInitAllProps){initPlugins=true}if(plugin._onDisable||plugin._onEnable){this._notifyPluginsOfEnabled=true}if(pt._next){pt._next._prev=pt}}else{propLookup[p]=_addPropTween.call(this,target,p,"get",v,p,0,null,this.vars.stringFilter)}}if(overwrittenProps)if(this._kill(overwrittenProps,target)){return this._initProps(target,propLookup,siblings,overwrittenProps)}if(this._overwrite>1)if(this._firstPT)if(siblings.length>1)if(_applyOverwrite(target,this,propLookup,this._overwrite,siblings)){this._kill(propLookup,target);return this._initProps(target,propLookup,siblings,overwrittenProps)}if(this._firstPT)if(this.vars.lazy!==false&&this._duration||this.vars.lazy&&!this._duration){_lazyLookup[target._gsTweenID]=true}return initPlugins};p.render=function(time,suppressEvents,force){var prevTime=this._time,duration=this._duration,prevRawPrevTime=this._rawPrevTime,isComplete,callback,pt,rawPrevTime;if(time>=duration){this._totalTime=this._time=duration;this.ratio=this._ease._calcEnd?this._ease.getRatio(1):1;if(!this._reversed){isComplete=true;callback="onComplete";force=force||this._timeline.autoRemoveChildren}if(duration===0)if(this._initted||!this.vars.lazy||force){if(this._startTime===this._timeline._duration){time=0}if(time===0||prevRawPrevTime<0||prevRawPrevTime===_tinyNum&&this.data!=="isPause")if(prevRawPrevTime!==time){force=true;if(prevRawPrevTime>_tinyNum){callback="onReverseComplete"}}this._rawPrevTime=rawPrevTime=!suppressEvents||time||prevRawPrevTime===time?time:_tinyNum}}else if(time<1e-7){this._totalTime=this._time=0;this.ratio=this._ease._calcEnd?this._ease.getRatio(0):0;if(prevTime!==0||duration===0&&prevRawPrevTime>0){callback="onReverseComplete";isComplete=this._reversed}if(time<0){this._active=false;if(duration===0)if(this._initted||!this.vars.lazy||force){if(prevRawPrevTime>=0&&!(prevRawPrevTime===_tinyNum&&this.data==="isPause")){force=true}this._rawPrevTime=rawPrevTime=!suppressEvents||time||prevRawPrevTime===time?time:_tinyNum}}if(!this._initted){force=true}}else{this._totalTime=this._time=time;if(this._easeType){var r=time/duration,type=this._easeType,pow=this._easePower;if(type===1||type===3&&r>=.5){r=1-r}if(type===3){r*=2}if(pow===1){r*=r}else if(pow===2){r*=r*r}else if(pow===3){r*=r*r*r}else if(pow===4){r*=r*r*r*r}if(type===1){this.ratio=1-r}else if(type===2){this.ratio=r}else if(time/duration<.5){this.ratio=r/2}else{this.ratio=1-r/2}}else{this.ratio=this._ease.getRatio(time/duration)}}if(this._time===prevTime&&!force){return}else if(!this._initted){this._init();if(!this._initted||this._gc){return}else if(!force&&this._firstPT&&(this.vars.lazy!==false&&this._duration||this.vars.lazy&&!this._duration)){this._time=this._totalTime=prevTime;this._rawPrevTime=prevRawPrevTime;_lazyTweens.push(this);this._lazy=[time,suppressEvents];return}if(this._time&&!isComplete){this.ratio=this._ease.getRatio(this._time/duration)}else if(isComplete&&this._ease._calcEnd){this.ratio=this._ease.getRatio(this._time===0?0:1)}}if(this._lazy!==false){this._lazy=false}if(!this._active)if(!this._paused&&this._time!==prevTime&&time>=0){this._active=true}if(prevTime===0){if(this._startAt){if(time>=0){this._startAt.render(time,suppressEvents,force)}else if(!callback){callback="_dummyGS"}}if(this.vars.onStart)if(this._time!==0||duration===0)if(!suppressEvents){this._callback("onStart")}}pt=this._firstPT;while(pt){if(pt.f){pt.t[pt.p](pt.c*this.ratio+pt.s)}else{pt.t[pt.p]=pt.c*this.ratio+pt.s}pt=pt._next}if(this._onUpdate){if(time<0)if(this._startAt&&time!==-1e-4){this._startAt.render(time,suppressEvents,force)}if(!suppressEvents)if(this._time!==prevTime||isComplete){this._callback("onUpdate")}}if(callback)if(!this._gc||force){if(time<0&&this._startAt&&!this._onUpdate&&time!==-1e-4){this._startAt.render(time,suppressEvents,force)}if(isComplete){if(this._timeline.autoRemoveChildren){this._enabled(false,false)}this._active=false}if(!suppressEvents&&this.vars[callback]){this._callback(callback)}if(duration===0&&this._rawPrevTime===_tinyNum&&rawPrevTime!==_tinyNum){this._rawPrevTime=0}}};p._kill=function(vars,target,overwritingTween){if(vars==="all"){vars=null}if(vars==null)if(target==null||target===this.target){this._lazy=false;return this._enabled(false,false)}target=typeof target!=="string"?target||this._targets||this.target:TweenLite.selector(target)||target;var simultaneousOverwrite=overwritingTween&&this._time&&overwritingTween._startTime===this._startTime&&this._timeline===overwritingTween._timeline,i,overwrittenProps,p,pt,propLookup,changed,killProps,record,killed;if((_isArray(target)||_isSelector(target))&&typeof target[0]!=="number"){i=target.length;while(--i>-1){if(this._kill(vars,target[i],overwritingTween)){changed=true}}}else{if(this._targets){i=this._targets.length;while(--i>-1){if(target===this._targets[i]){propLookup=this._propLookup[i]||{};this._overwrittenProps=this._overwrittenProps||[];overwrittenProps=this._overwrittenProps[i]=vars?this._overwrittenProps[i]||{}:"all";break}}}else if(target!==this.target){return false}else{propLookup=this._propLookup;overwrittenProps=this._overwrittenProps=vars?this._overwrittenProps||{}:"all"}if(propLookup){killProps=vars||propLookup;record=vars!==overwrittenProps&&overwrittenProps!=="all"&&vars!==propLookup&&(typeof vars!=="object"||!vars._tempKill);if(overwritingTween&&(TweenLite.onOverwrite||this.vars.onOverwrite)){for(p in killProps){if(propLookup[p]){if(!killed){killed=[]}killed.push(p)}}if((killed||!vars)&&!_onOverwrite(this,overwritingTween,target,killed)){return false}}for(p in killProps){if(pt=propLookup[p]){if(simultaneousOverwrite){if(pt.f){pt.t[pt.p](pt.s)}else{pt.t[pt.p]=pt.s}changed=true}if(pt.pg&&pt.t._kill(killProps)){changed=true}if(!pt.pg||pt.t._overwriteProps.length===0){if(pt._prev){pt._prev._next=pt._next}else if(pt===this._firstPT){this._firstPT=pt._next}if(pt._next){pt._next._prev=pt._prev}pt._next=pt._prev=null}delete propLookup[p]}if(record){overwrittenProps[p]=1}}if(!this._firstPT&&this._initted){this._enabled(false,false)}}}return changed};p.invalidate=function(){if(this._notifyPluginsOfEnabled){TweenLite._onPluginEvent("_onDisable",this)}this._firstPT=this._overwrittenProps=this._startAt=this._onUpdate=null;this._notifyPluginsOfEnabled=this._active=this._lazy=false;this._propLookup=this._targets?{}:[];Animation.prototype.invalidate.call(this);if(this.vars.immediateRender){this._time=-_tinyNum;this.render(-this._delay)}return this};p._enabled=function(enabled,ignoreTimeline){if(!_tickerActive){_ticker.wake()}if(enabled&&this._gc){var targets=this._targets,i;if(targets){i=targets.length;while(--i>-1){this._siblings[i]=_register(targets[i],this,true)}}else{this._siblings=_register(this.target,this,true)}}Animation.prototype._enabled.call(this,enabled,ignoreTimeline);if(this._notifyPluginsOfEnabled)if(this._firstPT){return TweenLite._onPluginEvent(enabled?"_onEnable":"_onDisable",this)}return false};TweenLite.to=function(target,duration,vars){return new TweenLite(target,duration,vars)};TweenLite.from=function(target,duration,vars){vars.runBackwards=true;vars.immediateRender=vars.immediateRender!=false;return new TweenLite(target,duration,vars)};TweenLite.fromTo=function(target,duration,fromVars,toVars){toVars.startAt=fromVars;toVars.immediateRender=toVars.immediateRender!=false&&fromVars.immediateRender!=false;return new TweenLite(target,duration,toVars)};TweenLite.delayedCall=function(delay,callback,params,scope,useFrames){return new TweenLite(callback,0,{delay:delay,onComplete:callback,onCompleteParams:params,callbackScope:scope,onReverseComplete:callback,onReverseCompleteParams:params,immediateRender:false,lazy:false,useFrames:useFrames,overwrite:0})};TweenLite.set=function(target,vars){return new TweenLite(target,0,vars)};TweenLite.getTweensOf=function(target,onlyActive){if(target==null){return[]}target=typeof target!=="string"?target:TweenLite.selector(target)||target;var i,a,j,t;if((_isArray(target)||_isSelector(target))&&typeof target[0]!=="number"){i=target.length;a=[];while(--i>-1){a=a.concat(TweenLite.getTweensOf(target[i],onlyActive))}i=a.length;while(--i>-1){t=a[i];j=i;while(--j>-1){if(t===a[j]){a.splice(i,1)}}}}else{a=_register(target).concat();i=a.length;while(--i>-1){if(a[i]._gc||onlyActive&&!a[i].isActive()){a.splice(i,1)}}}return a};TweenLite.killTweensOf=TweenLite.killDelayedCallsTo=function(target,onlyActive,vars){if(typeof onlyActive==="object"){vars=onlyActive;onlyActive=false}var a=TweenLite.getTweensOf(target,onlyActive),i=a.length;while(--i>-1){a[i]._kill(vars,target)}};var TweenPlugin=_class("plugins.TweenPlugin",function(props,priority){this._overwriteProps=(props||"").split(",");this._propName=this._overwriteProps[0];this._priority=priority||0;this._super=TweenPlugin.prototype},true);p=TweenPlugin.prototype;TweenPlugin.version="1.18.0";TweenPlugin.API=2;p._firstPT=null;p._addTween=_addPropTween;p.setRatio=_setRatio;p._kill=function(lookup){var a=this._overwriteProps,pt=this._firstPT,i;if(lookup[this._propName]!=null){this._overwriteProps=[]}else{i=a.length;while(--i>-1){if(lookup[a[i]]!=null){a.splice(i,1)}}}while(pt){if(lookup[pt.n]!=null){if(pt._next){pt._next._prev=pt._prev}if(pt._prev){pt._prev._next=pt._next;pt._prev=null}else if(this._firstPT===pt){this._firstPT=pt._next}}pt=pt._next}return false};p._roundProps=function(lookup,value){var pt=this._firstPT;while(pt){if(lookup[this._propName]||pt.n!=null&&lookup[pt.n.split(this._propName+"_").join("")]){pt.r=value}pt=pt._next}};TweenLite._onPluginEvent=function(type,tween){var pt=tween._firstPT,changed,pt2,first,last,next;if(type==="_onInitAllProps"){while(pt){next=pt._next;pt2=first;while(pt2&&pt2.pr>pt.pr){pt2=pt2._next}if(pt._prev=pt2?pt2._prev:last){pt._prev._next=pt}else{first=pt}if(pt._next=pt2){pt2._prev=pt}else{last=pt}pt=next}pt=tween._firstPT=first}while(pt){if(pt.pg)if(typeof pt.t[type]==="function")if(pt.t[type]()){changed=true}pt=pt._next}return changed};TweenPlugin.activate=function(plugins){var i=plugins.length;while(--i>-1){if(plugins[i].API===TweenPlugin.API){_plugins[(new plugins[i])._propName]=plugins[i]}}return true};_gsDefine.plugin=function(config){if(!config||!config.propName||!config.init||!config.API){throw"illegal plugin definition."}var propName=config.propName,priority=config.priority||0,overwriteProps=config.overwriteProps,map={init:"_onInitTween",set:"setRatio",kill:"_kill",round:"_roundProps",initAll:"_onInitAllProps"},Plugin=_class("plugins."+propName.charAt(0).toUpperCase()+propName.substr(1)+"Plugin",function(){TweenPlugin.call(this,propName,priority);this._overwriteProps=overwriteProps||[]},config.global===true),p=Plugin.prototype=new TweenPlugin(propName),prop;p.constructor=Plugin;Plugin.API=config.API;for(prop in map){if(typeof config[prop]==="function"){p[map[prop]]=config[prop]}}Plugin.version=config.version;TweenPlugin.activate([Plugin]);return Plugin};a=window._gsQueue;if(a){for(i=0;i<a.length;i++){a[i]()}for(p in _defLookup){
        if(!_defLookup[p].func){window.console.log("GSAP encountered missing dependency: com.greensock."+p)}}}_tickerActive=false})(typeof module!=="undefined"&&module.exports&&typeof global!=="undefined"?global:this||window,"TweenMax")}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{}],5:[function(require,module,exports){(function(process){(function(){var getNanoSeconds,hrtime,loadTime;if(typeof performance!=="undefined"&&performance!==null&&performance.now){module.exports=function(){return performance.now()}}else if(typeof process!=="undefined"&&process!==null&&process.hrtime){module.exports=function(){return(getNanoSeconds()-loadTime)/1e6};hrtime=process.hrtime;getNanoSeconds=function(){var hr;hr=hrtime();return hr[0]*1e9+hr[1]};loadTime=getNanoSeconds()}else if(Date.now){module.exports=function(){return Date.now()-loadTime};loadTime=Date.now()}else{module.exports=function(){return(new Date).getTime()-loadTime};loadTime=(new Date).getTime()}}).call(this)}).call(this,require("_process"))},{_process:6}],6:[function(require,module,exports){var process=module.exports={};var queue=[];var draining=false;var currentQueue;var queueIndex=-1;function cleanUpNextTick(){draining=false;if(currentQueue.length){queue=currentQueue.concat(queue)}else{queueIndex=-1}if(queue.length){drainQueue()}}function drainQueue(){if(draining){return}var timeout=setTimeout(cleanUpNextTick);draining=true;var len=queue.length;while(len){currentQueue=queue;queue=[];while(++queueIndex<len){if(currentQueue){currentQueue[queueIndex].run()}}queueIndex=-1;len=queue.length}currentQueue=null;draining=false;clearTimeout(timeout)}process.nextTick=function(fun){var args=new Array(arguments.length-1);if(arguments.length>1){for(var i=1;i<arguments.length;i++){args[i-1]=arguments[i]}}queue.push(new Item(fun,args));if(queue.length===1&&!draining){setTimeout(drainQueue,0)}};function Item(fun,array){this.fun=fun;this.array=array}Item.prototype.run=function(){this.fun.apply(null,this.array)};process.title="browser";process.browser=true;process.env={};process.argv=[];process.version="";process.versions={};function noop(){}process.on=noop;process.addListener=noop;process.once=noop;process.off=noop;process.removeListener=noop;process.removeAllListeners=noop;process.emit=noop;process.binding=function(name){throw new Error("process.binding is not supported")};process.cwd=function(){return"/"};process.chdir=function(dir){throw new Error("process.chdir is not supported")};process.umask=function(){return 0}},{}],7:[function(require,module,exports){var now=require("performance-now"),global=typeof window==="undefined"?{}:window,vendors=["moz","webkit"],suffix="AnimationFrame",raf=global["request"+suffix],caf=global["cancel"+suffix]||global["cancelRequest"+suffix];for(var i=0;i<vendors.length&&!raf;i++){raf=global[vendors[i]+"Request"+suffix];caf=global[vendors[i]+"Cancel"+suffix]||global[vendors[i]+"CancelRequest"+suffix]}if(!raf||!caf){var last=0,id=0,queue=[],frameDuration=1e3/60;raf=function(callback){if(queue.length===0){var _now=now(),next=Math.max(0,frameDuration-(_now-last));last=next+_now;setTimeout(function(){var cp=queue.slice(0);queue.length=0;for(var i=0;i<cp.length;i++){if(!cp[i].cancelled){try{cp[i].callback(last)}catch(e){setTimeout(function(){throw e},0)}}}},Math.round(next))}queue.push({handle:++id,callback:callback,cancelled:false});return id};caf=function(handle){for(var i=0;i<queue.length;i++){if(queue[i].handle===handle){queue[i].cancelled=true}}}}module.exports=function(fn){return raf.call(global,fn)};module.exports.cancel=function(){caf.apply(global,arguments)}},{"performance-now":5}],8:[function(require,module,exports){var self=self||{};var THREE={REVISION:"73"};if(typeof define==="function"&&define.amd){define("three",THREE)}else if("undefined"!==typeof exports&&"undefined"!==typeof module){module.exports=THREE}if(self.requestAnimationFrame===undefined||self.cancelAnimationFrame===undefined){(function(){var lastTime=0;var vendors=["ms","moz","webkit","o"];for(var x=0;x<vendors.length&&!self.requestAnimationFrame;++x){self.requestAnimationFrame=self[vendors[x]+"RequestAnimationFrame"];self.cancelAnimationFrame=self[vendors[x]+"CancelAnimationFrame"]||self[vendors[x]+"CancelRequestAnimationFrame"]}if(self.requestAnimationFrame===undefined&&self.setTimeout!==undefined){self.requestAnimationFrame=function(callback){var currTime=Date.now(),timeToCall=Math.max(0,16-(currTime-lastTime));var id=self.setTimeout(function(){callback(currTime+timeToCall)},timeToCall);lastTime=currTime+timeToCall;return id}}if(self.cancelAnimationFrame===undefined&&self.clearTimeout!==undefined){self.cancelAnimationFrame=function(id){self.clearTimeout(id)}}})()}if(self.performance===undefined){self.performance={}}if(self.performance.now===undefined){(function(){var start=Date.now();self.performance.now=function(){return Date.now()-start}})()}if(Number.EPSILON===undefined){Number.EPSILON=Math.pow(2,-52)}if(Math.sign===undefined){Math.sign=function(x){return x<0?-1:x>0?1:+x}}if(Function.prototype.name===undefined&&Object.defineProperty!==undefined){Object.defineProperty(Function.prototype,"name",{get:function(){return this.toString().match(/^\s*function\s*(\S*)\s*\(/)[1]}})}THREE.MOUSE={LEFT:0,MIDDLE:1,RIGHT:2};THREE.CullFaceNone=0;THREE.CullFaceBack=1;THREE.CullFaceFront=2;THREE.CullFaceFrontBack=3;THREE.FrontFaceDirectionCW=0;THREE.FrontFaceDirectionCCW=1;THREE.BasicShadowMap=0;THREE.PCFShadowMap=1;THREE.PCFSoftShadowMap=2;THREE.FrontSide=0;THREE.BackSide=1;THREE.DoubleSide=2;THREE.FlatShading=1;THREE.SmoothShading=2;THREE.NoColors=0;THREE.FaceColors=1;THREE.VertexColors=2;THREE.NoBlending=0;THREE.NormalBlending=1;THREE.AdditiveBlending=2;THREE.SubtractiveBlending=3;THREE.MultiplyBlending=4;THREE.CustomBlending=5;THREE.AddEquation=100;THREE.SubtractEquation=101;THREE.ReverseSubtractEquation=102;THREE.MinEquation=103;THREE.MaxEquation=104;THREE.ZeroFactor=200;THREE.OneFactor=201;THREE.SrcColorFactor=202;THREE.OneMinusSrcColorFactor=203;THREE.SrcAlphaFactor=204;THREE.OneMinusSrcAlphaFactor=205;THREE.DstAlphaFactor=206;THREE.OneMinusDstAlphaFactor=207;THREE.DstColorFactor=208;THREE.OneMinusDstColorFactor=209;THREE.SrcAlphaSaturateFactor=210;THREE.NeverDepth=0;THREE.AlwaysDepth=1;THREE.LessDepth=2;THREE.LessEqualDepth=3;THREE.EqualDepth=4;THREE.GreaterEqualDepth=5;THREE.GreaterDepth=6;THREE.NotEqualDepth=7;THREE.MultiplyOperation=0;THREE.MixOperation=1;THREE.AddOperation=2;THREE.UVMapping=300;THREE.CubeReflectionMapping=301;THREE.CubeRefractionMapping=302;THREE.EquirectangularReflectionMapping=303;THREE.EquirectangularRefractionMapping=304;THREE.SphericalReflectionMapping=305;THREE.RepeatWrapping=1e3;THREE.ClampToEdgeWrapping=1001;THREE.MirroredRepeatWrapping=1002;THREE.NearestFilter=1003;THREE.NearestMipMapNearestFilter=1004;THREE.NearestMipMapLinearFilter=1005;THREE.LinearFilter=1006;THREE.LinearMipMapNearestFilter=1007;THREE.LinearMipMapLinearFilter=1008;THREE.UnsignedByteType=1009;THREE.ByteType=1010;THREE.ShortType=1011;THREE.UnsignedShortType=1012;THREE.IntType=1013;THREE.UnsignedIntType=1014;THREE.FloatType=1015;THREE.HalfFloatType=1025;THREE.UnsignedShort4444Type=1016;THREE.UnsignedShort5551Type=1017;THREE.UnsignedShort565Type=1018;THREE.AlphaFormat=1019;THREE.RGBFormat=1020;THREE.RGBAFormat=1021;THREE.LuminanceFormat=1022;THREE.LuminanceAlphaFormat=1023;THREE.RGBEFormat=THREE.RGBAFormat;THREE.RGB_S3TC_DXT1_Format=2001;THREE.RGBA_S3TC_DXT1_Format=2002;THREE.RGBA_S3TC_DXT3_Format=2003;THREE.RGBA_S3TC_DXT5_Format=2004;THREE.RGB_PVRTC_4BPPV1_Format=2100;THREE.RGB_PVRTC_2BPPV1_Format=2101;THREE.RGBA_PVRTC_4BPPV1_Format=2102;THREE.RGBA_PVRTC_2BPPV1_Format=2103;THREE.LoopOnce=2200;THREE.LoopRepeat=2201;THREE.LoopPingPong=2202;THREE.Projector=function(){console.error("THREE.Projector has been moved to /examples/js/renderers/Projector.js.");this.projectVector=function(vector,camera){console.warn("THREE.Projector: .projectVector() is now vector.project().");vector.project(camera)};this.unprojectVector=function(vector,camera){console.warn("THREE.Projector: .unprojectVector() is now vector.unproject().");vector.unproject(camera)};this.pickingRay=function(vector,camera){console.error("THREE.Projector: .pickingRay() is now raycaster.setFromCamera().")}};THREE.CanvasRenderer=function(){console.error("THREE.CanvasRenderer has been moved to /examples/js/renderers/CanvasRenderer.js");this.domElement=document.createElement("canvas");this.clear=function(){};this.render=function(){};this.setClearColor=function(){};this.setSize=function(){}};THREE.Color=function(color){if(arguments.length===3){return this.fromArray(arguments)}return this.set(color)};THREE.Color.prototype={constructor:THREE.Color,r:1,g:1,b:1,set:function(value){if(value instanceof THREE.Color){this.copy(value)}else if(typeof value==="number"){this.setHex(value)}else if(typeof value==="string"){this.setStyle(value)}return this},setHex:function(hex){hex=Math.floor(hex);this.r=(hex>>16&255)/255;this.g=(hex>>8&255)/255;this.b=(hex&255)/255;return this},setRGB:function(r,g,b){this.r=r;this.g=g;this.b=b;return this},setHSL:function(){function hue2rgb(p,q,t){if(t<0)t+=1;if(t>1)t-=1;if(t<1/6)return p+(q-p)*6*t;if(t<1/2)return q;if(t<2/3)return p+(q-p)*6*(2/3-t);return p}return function(h,s,l){h=THREE.Math.euclideanModulo(h,1);s=THREE.Math.clamp(s,0,1);l=THREE.Math.clamp(l,0,1);if(s===0){this.r=this.g=this.b=l}else{var p=l<=.5?l*(1+s):l+s-l*s;var q=2*l-p;this.r=hue2rgb(q,p,h+1/3);this.g=hue2rgb(q,p,h);this.b=hue2rgb(q,p,h-1/3)}return this}}(),setStyle:function(style){function handleAlpha(string){if(string===undefined)return;if(parseFloat(string)<1){console.warn("THREE.Color: Alpha component of "+style+" will be ignored.")}}var m;if(m=/^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(style)){var color;var name=m[1];var components=m[2];switch(name){case"rgb":case"rgba":if(color=/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(components)){this.r=Math.min(255,parseInt(color[1],10))/255;this.g=Math.min(255,parseInt(color[2],10))/255;this.b=Math.min(255,parseInt(color[3],10))/255;handleAlpha(color[5]);return this}if(color=/^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(components)){this.r=Math.min(100,parseInt(color[1],10))/100;this.g=Math.min(100,parseInt(color[2],10))/100;this.b=Math.min(100,parseInt(color[3],10))/100;handleAlpha(color[5]);return this}break;case"hsl":case"hsla":if(color=/^([0-9]*\.?[0-9]+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(components)){var h=parseFloat(color[1])/360;var s=parseInt(color[2],10)/100;var l=parseInt(color[3],10)/100;handleAlpha(color[5]);return this.setHSL(h,s,l)}break}}else if(m=/^\#([A-Fa-f0-9]+)$/.exec(style)){var hex=m[1];var size=hex.length;if(size===3){this.r=parseInt(hex.charAt(0)+hex.charAt(0),16)/255;this.g=parseInt(hex.charAt(1)+hex.charAt(1),16)/255;this.b=parseInt(hex.charAt(2)+hex.charAt(2),16)/255;return this}else if(size===6){this.r=parseInt(hex.charAt(0)+hex.charAt(1),16)/255;this.g=parseInt(hex.charAt(2)+hex.charAt(3),16)/255;this.b=parseInt(hex.charAt(4)+hex.charAt(5),16)/255;return this}}if(style&&style.length>0){var hex=THREE.ColorKeywords[style];if(hex!==undefined){this.setHex(hex)}else{console.warn("THREE.Color: Unknown color "+style)}}return this},clone:function(){return new this.constructor(this.r,this.g,this.b)},copy:function(color){this.r=color.r;this.g=color.g;this.b=color.b;return this},copyGammaToLinear:function(color,gammaFactor){if(gammaFactor===undefined)gammaFactor=2;this.r=Math.pow(color.r,gammaFactor);this.g=Math.pow(color.g,gammaFactor);this.b=Math.pow(color.b,gammaFactor);return this},copyLinearToGamma:function(color,gammaFactor){if(gammaFactor===undefined)gammaFactor=2;var safeInverse=gammaFactor>0?1/gammaFactor:1;this.r=Math.pow(color.r,safeInverse);this.g=Math.pow(color.g,safeInverse);this.b=Math.pow(color.b,safeInverse);return this},convertGammaToLinear:function(){var r=this.r,g=this.g,b=this.b;this.r=r*r;this.g=g*g;this.b=b*b;return this},convertLinearToGamma:function(){this.r=Math.sqrt(this.r);this.g=Math.sqrt(this.g);this.b=Math.sqrt(this.b);return this},getHex:function(){return this.r*255<<16^this.g*255<<8^this.b*255<<0},getHexString:function(){return("000000"+this.getHex().toString(16)).slice(-6)},getHSL:function(optionalTarget){var hsl=optionalTarget||{h:0,s:0,l:0};var r=this.r,g=this.g,b=this.b;var max=Math.max(r,g,b);var min=Math.min(r,g,b);var hue,saturation;var lightness=(min+max)/2;if(min===max){hue=0;saturation=0}else{var delta=max-min;saturation=lightness<=.5?delta/(max+min):delta/(2-max-min);switch(max){case r:hue=(g-b)/delta+(g<b?6:0);break;case g:hue=(b-r)/delta+2;break;case b:hue=(r-g)/delta+4;break}hue/=6}hsl.h=hue;hsl.s=saturation;hsl.l=lightness;return hsl},getStyle:function(){return"rgb("+(this.r*255|0)+","+(this.g*255|0)+","+(this.b*255|0)+")"},offsetHSL:function(h,s,l){var hsl=this.getHSL();hsl.h+=h;hsl.s+=s;hsl.l+=l;this.setHSL(hsl.h,hsl.s,hsl.l);return this},add:function(color){this.r+=color.r;this.g+=color.g;this.b+=color.b;return this},addColors:function(color1,color2){this.r=color1.r+color2.r;this.g=color1.g+color2.g;this.b=color1.b+color2.b;return this},addScalar:function(s){this.r+=s;this.g+=s;this.b+=s;return this},multiply:function(color){this.r*=color.r;this.g*=color.g;this.b*=color.b;return this},multiplyScalar:function(s){this.r*=s;this.g*=s;this.b*=s;return this},lerp:function(color,alpha){this.r+=(color.r-this.r)*alpha;this.g+=(color.g-this.g)*alpha;this.b+=(color.b-this.b)*alpha;return this},equals:function(c){return c.r===this.r&&c.g===this.g&&c.b===this.b},fromArray:function(array,offset){if(offset===undefined)offset=0;this.r=array[offset];this.g=array[offset+1];this.b=array[offset+2];return this},toArray:function(array,offset){if(array===undefined)array=[];if(offset===undefined)offset=0;array[offset]=this.r;array[offset+1]=this.g;array[offset+2]=this.b;return array}};THREE.ColorKeywords={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};THREE.Quaternion=function(x,y,z,w){this._x=x||0;this._y=y||0;this._z=z||0;this._w=w!==undefined?w:1};THREE.Quaternion.prototype={constructor:THREE.Quaternion,get x(){return this._x},set x(value){this._x=value;this.onChangeCallback()},get y(){return this._y},set y(value){this._y=value;this.onChangeCallback()},get z(){return this._z},set z(value){this._z=value;this.onChangeCallback()},get w(){return this._w},set w(value){this._w=value;this.onChangeCallback()},set:function(x,y,z,w){this._x=x;this._y=y;this._z=z;this._w=w;this.onChangeCallback();return this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._w)},copy:function(quaternion){this._x=quaternion.x;this._y=quaternion.y;this._z=quaternion.z;this._w=quaternion.w;this.onChangeCallback();return this},setFromEuler:function(euler,update){if(euler instanceof THREE.Euler===false){throw new Error("THREE.Quaternion: .setFromEuler() now expects a Euler rotation rather than a Vector3 and order.")}var c1=Math.cos(euler._x/2);var c2=Math.cos(euler._y/2);var c3=Math.cos(euler._z/2);var s1=Math.sin(euler._x/2);var s2=Math.sin(euler._y/2);var s3=Math.sin(euler._z/2);var order=euler.order;if(order==="XYZ"){this._x=s1*c2*c3+c1*s2*s3;this._y=c1*s2*c3-s1*c2*s3;this._z=c1*c2*s3+s1*s2*c3;this._w=c1*c2*c3-s1*s2*s3}else if(order==="YXZ"){this._x=s1*c2*c3+c1*s2*s3;this._y=c1*s2*c3-s1*c2*s3;this._z=c1*c2*s3-s1*s2*c3;this._w=c1*c2*c3+s1*s2*s3}else if(order==="ZXY"){this._x=s1*c2*c3-c1*s2*s3;this._y=c1*s2*c3+s1*c2*s3;this._z=c1*c2*s3+s1*s2*c3;this._w=c1*c2*c3-s1*s2*s3}else if(order==="ZYX"){this._x=s1*c2*c3-c1*s2*s3;this._y=c1*s2*c3+s1*c2*s3;this._z=c1*c2*s3-s1*s2*c3;this._w=c1*c2*c3+s1*s2*s3}else if(order==="YZX"){this._x=s1*c2*c3+c1*s2*s3;this._y=c1*s2*c3+s1*c2*s3;this._z=c1*c2*s3-s1*s2*c3;this._w=c1*c2*c3-s1*s2*s3}else if(order==="XZY"){this._x=s1*c2*c3-c1*s2*s3;this._y=c1*s2*c3-s1*c2*s3;this._z=c1*c2*s3+s1*s2*c3;this._w=c1*c2*c3+s1*s2*s3}if(update!==false)this.onChangeCallback();return this},setFromAxisAngle:function(axis,angle){var halfAngle=angle/2,s=Math.sin(halfAngle);this._x=axis.x*s;this._y=axis.y*s;this._z=axis.z*s;this._w=Math.cos(halfAngle);this.onChangeCallback();return this},setFromRotationMatrix:function(m){var te=m.elements,m11=te[0],m12=te[4],m13=te[8],m21=te[1],m22=te[5],m23=te[9],m31=te[2],m32=te[6],m33=te[10],trace=m11+m22+m33,s;if(trace>0){s=.5/Math.sqrt(trace+1);this._w=.25/s;this._x=(m32-m23)*s;this._y=(m13-m31)*s;this._z=(m21-m12)*s}else if(m11>m22&&m11>m33){s=2*Math.sqrt(1+m11-m22-m33);this._w=(m32-m23)/s;this._x=.25*s;this._y=(m12+m21)/s;this._z=(m13+m31)/s}else if(m22>m33){s=2*Math.sqrt(1+m22-m11-m33);this._w=(m13-m31)/s;this._x=(m12+m21)/s;this._y=.25*s;this._z=(m23+m32)/s}else{s=2*Math.sqrt(1+m33-m11-m22);this._w=(m21-m12)/s;this._x=(m13+m31)/s;this._y=(m23+m32)/s;this._z=.25*s}this.onChangeCallback();return this},setFromUnitVectors:function(){var v1,r;var EPS=1e-6;return function(vFrom,vTo){if(v1===undefined)v1=new THREE.Vector3;r=vFrom.dot(vTo)+1;if(r<EPS){r=0;if(Math.abs(vFrom.x)>Math.abs(vFrom.z)){v1.set(-vFrom.y,vFrom.x,0)}else{v1.set(0,-vFrom.z,vFrom.y)}}else{v1.crossVectors(vFrom,vTo)}this._x=v1.x;this._y=v1.y;this._z=v1.z;this._w=r;this.normalize();return this}}(),inverse:function(){this.conjugate().normalize();return this},conjugate:function(){this._x*=-1;this._y*=-1;this._z*=-1;this.onChangeCallback();return this},dot:function(v){return this._x*v._x+this._y*v._y+this._z*v._z+this._w*v._w},lengthSq:function(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w},length:function(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)},normalize:function(){var l=this.length();if(l===0){this._x=0;this._y=0;this._z=0;this._w=1}else{l=1/l;this._x=this._x*l;this._y=this._y*l;this._z=this._z*l;this._w=this._w*l}this.onChangeCallback();return this},multiply:function(q,p){if(p!==undefined){console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.");return this.multiplyQuaternions(q,p)}return this.multiplyQuaternions(this,q)},multiplyQuaternions:function(a,b){var qax=a._x,qay=a._y,qaz=a._z,qaw=a._w;var qbx=b._x,qby=b._y,qbz=b._z,qbw=b._w;this._x=qax*qbw+qaw*qbx+qay*qbz-qaz*qby;this._y=qay*qbw+qaw*qby+qaz*qbx-qax*qbz;this._z=qaz*qbw+qaw*qbz+qax*qby-qay*qbx;this._w=qaw*qbw-qax*qbx-qay*qby-qaz*qbz;this.onChangeCallback();return this},multiplyVector3:function(vector){console.warn("THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.");return vector.applyQuaternion(this)},slerp:function(qb,t){if(t===0)return this;if(t===1)return this.copy(qb);var x=this._x,y=this._y,z=this._z,w=this._w;var cosHalfTheta=w*qb._w+x*qb._x+y*qb._y+z*qb._z;if(cosHalfTheta<0){this._w=-qb._w;this._x=-qb._x;this._y=-qb._y;this._z=-qb._z;cosHalfTheta=-cosHalfTheta}else{this.copy(qb)}if(cosHalfTheta>=1){this._w=w;this._x=x;this._y=y;this._z=z;return this}var halfTheta=Math.acos(cosHalfTheta);var sinHalfTheta=Math.sqrt(1-cosHalfTheta*cosHalfTheta);if(Math.abs(sinHalfTheta)<.001){this._w=.5*(w+this._w);this._x=.5*(x+this._x);this._y=.5*(y+this._y);this._z=.5*(z+this._z);return this}var ratioA=Math.sin((1-t)*halfTheta)/sinHalfTheta,ratioB=Math.sin(t*halfTheta)/sinHalfTheta;this._w=w*ratioA+this._w*ratioB;this._x=x*ratioA+this._x*ratioB;this._y=y*ratioA+this._y*ratioB;this._z=z*ratioA+this._z*ratioB;this.onChangeCallback();return this},equals:function(quaternion){return quaternion._x===this._x&&quaternion._y===this._y&&quaternion._z===this._z&&quaternion._w===this._w},fromArray:function(array,offset){if(offset===undefined)offset=0;this._x=array[offset];this._y=array[offset+1];this._z=array[offset+2];this._w=array[offset+3];this.onChangeCallback();return this},toArray:function(array,offset){if(array===undefined)array=[];if(offset===undefined)offset=0;array[offset]=this._x;array[offset+1]=this._y;array[offset+2]=this._z;array[offset+3]=this._w;return array},onChange:function(callback){this.onChangeCallback=callback;return this},onChangeCallback:function(){}};THREE.Quaternion.slerp=function(qa,qb,qm,t){return qm.copy(qa).slerp(qb,t)};THREE.Vector2=function(x,y){this.x=x||0;this.y=y||0};THREE.Vector2.prototype={constructor:THREE.Vector2,get width(){return this.x},set width(value){this.x=value},get height(){return this.y},set height(value){this.y=value},set:function(x,y){this.x=x;this.y=y;return this},setX:function(x){this.x=x;return this},setY:function(y){this.y=y;return this},setComponent:function(index,value){switch(index){case 0:this.x=value;break;case 1:this.y=value;break;default:throw new Error("index is out of range: "+index)}},getComponent:function(index){switch(index){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+index)}},clone:function(){return new this.constructor(this.x,this.y)},copy:function(v){this.x=v.x;this.y=v.y;return this},add:function(v,w){if(w!==undefined){console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.");return this.addVectors(v,w)}this.x+=v.x;this.y+=v.y;return this},addScalar:function(s){this.x+=s;this.y+=s;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;return this},addScaledVector:function(v,s){this.x+=v.x*s;this.y+=v.y*s;return this},sub:function(v,w){if(w!==undefined){console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.");return this.subVectors(v,w)}this.x-=v.x;this.y-=v.y;return this},subScalar:function(s){this.x-=s;this.y-=s;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;return this},multiply:function(v){this.x*=v.x;this.y*=v.y;return this},multiplyScalar:function(scalar){if(isFinite(scalar)){this.x*=scalar;this.y*=scalar}else{this.x=0;this.y=0}return this},divide:function(v){this.x/=v.x;this.y/=v.y;return this},divideScalar:function(scalar){return this.multiplyScalar(1/scalar)},min:function(v){this.x=Math.min(this.x,v.x);this.y=Math.min(this.y,v.y);return this},max:function(v){this.x=Math.max(this.x,v.x);this.y=Math.max(this.y,v.y);return this},clamp:function(min,max){this.x=Math.max(min.x,Math.min(max.x,this.x));this.y=Math.max(min.y,Math.min(max.y,this.y));return this},clampScalar:function(){var min,max;return function clampScalar(minVal,maxVal){if(min===undefined){min=new THREE.Vector2;max=new THREE.Vector2}min.set(minVal,minVal);max.set(maxVal,maxVal);return this.clamp(min,max)}}(),clampLength:function(min,max){var length=this.length();this.multiplyScalar(Math.max(min,Math.min(max,length))/length);return this},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this},roundToZero:function(){this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x);this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y);return this},negate:function(){this.x=-this.x;this.y=-this.y;return this},dot:function(v){return this.x*v.x+this.y*v.y},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)},normalize:function(){return this.divideScalar(this.length())},distanceTo:function(v){return Math.sqrt(this.distanceToSquared(v))},distanceToSquared:function(v){var dx=this.x-v.x,dy=this.y-v.y;return dx*dx+dy*dy},setLength:function(length){return this.multiplyScalar(length/this.length())},lerp:function(v,alpha){this.x+=(v.x-this.x)*alpha;this.y+=(v.y-this.y)*alpha;return this},lerpVectors:function(v1,v2,alpha){this.subVectors(v2,v1).multiplyScalar(alpha).add(v1);return this},equals:function(v){return v.x===this.x&&v.y===this.y},fromArray:function(array,offset){if(offset===undefined)offset=0;this.x=array[offset];this.y=array[offset+1];return this},toArray:function(array,offset){if(array===undefined)array=[];if(offset===undefined)offset=0;array[offset]=this.x;array[offset+1]=this.y;return array},fromAttribute:function(attribute,index,offset){if(offset===undefined)offset=0;index=index*attribute.itemSize+offset;this.x=attribute.array[index];this.y=attribute.array[index+1];return this},rotateAround:function(center,angle){var c=Math.cos(angle),s=Math.sin(angle);var x=this.x-center.x;var y=this.y-center.y;this.x=x*c-y*s+center.x;this.y=x*s+y*c+center.y;return this}};THREE.Vector3=function(x,y,z){this.x=x||0;this.y=y||0;this.z=z||0};THREE.Vector3.prototype={constructor:THREE.Vector3,set:function(x,y,z){this.x=x;this.y=y;this.z=z;return this},setX:function(x){this.x=x;return this},setY:function(y){this.y=y;return this},setZ:function(z){this.z=z;return this},setComponent:function(index,value){switch(index){case 0:this.x=value;break;case 1:this.y=value;break;case 2:this.z=value;break;default:throw new Error("index is out of range: "+index)}},getComponent:function(index){switch(index){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+index)}},clone:function(){return new this.constructor(this.x,this.y,this.z)},copy:function(v){this.x=v.x;this.y=v.y;this.z=v.z;return this},add:function(v,w){if(w!==undefined){console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.");return this.addVectors(v,w)}this.x+=v.x;this.y+=v.y;this.z+=v.z;return this},addScalar:function(s){this.x+=s;this.y+=s;this.z+=s;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;return this},addScaledVector:function(v,s){this.x+=v.x*s;this.y+=v.y*s;this.z+=v.z*s;return this},sub:function(v,w){if(w!==undefined){console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.");return this.subVectors(v,w)}this.x-=v.x;this.y-=v.y;this.z-=v.z;return this},subScalar:function(s){this.x-=s;this.y-=s;this.z-=s;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;return this},multiply:function(v,w){if(w!==undefined){console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.");return this.multiplyVectors(v,w)}this.x*=v.x;this.y*=v.y;this.z*=v.z;return this},multiplyScalar:function(scalar){if(isFinite(scalar)){this.x*=scalar;this.y*=scalar;this.z*=scalar}else{this.x=0;this.y=0;this.z=0}return this},multiplyVectors:function(a,b){this.x=a.x*b.x;this.y=a.y*b.y;this.z=a.z*b.z;return this},applyEuler:function(){var quaternion;return function applyEuler(euler){if(euler instanceof THREE.Euler===false){console.error("THREE.Vector3: .applyEuler() now expects a Euler rotation rather than a Vector3 and order.")}if(quaternion===undefined)quaternion=new THREE.Quaternion;this.applyQuaternion(quaternion.setFromEuler(euler));return this}}(),applyAxisAngle:function(){var quaternion;return function applyAxisAngle(axis,angle){if(quaternion===undefined)quaternion=new THREE.Quaternion;this.applyQuaternion(quaternion.setFromAxisAngle(axis,angle));return this}}(),applyMatrix3:function(m){var x=this.x;var y=this.y;var z=this.z;var e=m.elements;this.x=e[0]*x+e[3]*y+e[6]*z;this.y=e[1]*x+e[4]*y+e[7]*z;this.z=e[2]*x+e[5]*y+e[8]*z;return this},applyMatrix4:function(m){var x=this.x,y=this.y,z=this.z;var e=m.elements;this.x=e[0]*x+e[4]*y+e[8]*z+e[12];this.y=e[1]*x+e[5]*y+e[9]*z+e[13];this.z=e[2]*x+e[6]*y+e[10]*z+e[14];return this},applyProjection:function(m){var x=this.x,y=this.y,z=this.z;var e=m.elements;var d=1/(e[3]*x+e[7]*y+e[11]*z+e[15]);this.x=(e[0]*x+e[4]*y+e[8]*z+e[12])*d;this.y=(e[1]*x+e[5]*y+e[9]*z+e[13])*d;this.z=(e[2]*x+e[6]*y+e[10]*z+e[14])*d;return this},applyQuaternion:function(q){var x=this.x;var y=this.y;var z=this.z;var qx=q.x;var qy=q.y;var qz=q.z;var qw=q.w;var ix=qw*x+qy*z-qz*y;var iy=qw*y+qz*x-qx*z;var iz=qw*z+qx*y-qy*x;var iw=-qx*x-qy*y-qz*z;this.x=ix*qw+iw*-qx+iy*-qz-iz*-qy;this.y=iy*qw+iw*-qy+iz*-qx-ix*-qz;this.z=iz*qw+iw*-qz+ix*-qy-iy*-qx;return this},project:function(){var matrix;return function project(camera){if(matrix===undefined)matrix=new THREE.Matrix4;matrix.multiplyMatrices(camera.projectionMatrix,matrix.getInverse(camera.matrixWorld));return this.applyProjection(matrix)}}(),unproject:function(){var matrix;return function unproject(camera){if(matrix===undefined)matrix=new THREE.Matrix4;matrix.multiplyMatrices(camera.matrixWorld,matrix.getInverse(camera.projectionMatrix));return this.applyProjection(matrix)}}(),transformDirection:function(m){var x=this.x,y=this.y,z=this.z;var e=m.elements;this.x=e[0]*x+e[4]*y+e[8]*z;this.y=e[1]*x+e[5]*y+e[9]*z;this.z=e[2]*x+e[6]*y+e[10]*z;this.normalize();return this},divide:function(v){this.x/=v.x;this.y/=v.y;this.z/=v.z;return this},divideScalar:function(scalar){return this.multiplyScalar(1/scalar)},min:function(v){this.x=Math.min(this.x,v.x);this.y=Math.min(this.y,v.y);this.z=Math.min(this.z,v.z);return this},max:function(v){this.x=Math.max(this.x,v.x);this.y=Math.max(this.y,v.y);this.z=Math.max(this.z,v.z);return this},clamp:function(min,max){this.x=Math.max(min.x,Math.min(max.x,this.x));this.y=Math.max(min.y,Math.min(max.y,this.y));this.z=Math.max(min.z,Math.min(max.z,this.z));return this},clampScalar:function(){var min,max;return function clampScalar(minVal,maxVal){if(min===undefined){min=new THREE.Vector3;max=new THREE.Vector3}min.set(minVal,minVal,minVal);

        max.set(maxVal,maxVal,maxVal);return this.clamp(min,max)}}(),clampLength:function(min,max){var length=this.length();this.multiplyScalar(Math.max(min,Math.min(max,length))/length);return this},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);return this},roundToZero:function(){this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x);this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y);this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;return this},dot:function(v){return this.x*v.x+this.y*v.y+this.z*v.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length())},setLength:function(length){return this.multiplyScalar(length/this.length())},lerp:function(v,alpha){this.x+=(v.x-this.x)*alpha;this.y+=(v.y-this.y)*alpha;this.z+=(v.z-this.z)*alpha;return this},lerpVectors:function(v1,v2,alpha){this.subVectors(v2,v1).multiplyScalar(alpha).add(v1);return this},cross:function(v,w){if(w!==undefined){console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.");return this.crossVectors(v,w)}var x=this.x,y=this.y,z=this.z;this.x=y*v.z-z*v.y;this.y=z*v.x-x*v.z;this.z=x*v.y-y*v.x;return this},crossVectors:function(a,b){var ax=a.x,ay=a.y,az=a.z;var bx=b.x,by=b.y,bz=b.z;this.x=ay*bz-az*by;this.y=az*bx-ax*bz;this.z=ax*by-ay*bx;return this},projectOnVector:function(){var v1,dot;return function projectOnVector(vector){if(v1===undefined)v1=new THREE.Vector3;v1.copy(vector).normalize();dot=this.dot(v1);return this.copy(v1).multiplyScalar(dot)}}(),projectOnPlane:function(){var v1;return function projectOnPlane(planeNormal){if(v1===undefined)v1=new THREE.Vector3;v1.copy(this).projectOnVector(planeNormal);return this.sub(v1)}}(),reflect:function(){var v1;return function reflect(normal){if(v1===undefined)v1=new THREE.Vector3;return this.sub(v1.copy(normal).multiplyScalar(2*this.dot(normal)))}}(),angleTo:function(v){var theta=this.dot(v)/(this.length()*v.length());return Math.acos(THREE.Math.clamp(theta,-1,1))},distanceTo:function(v){return Math.sqrt(this.distanceToSquared(v))},distanceToSquared:function(v){var dx=this.x-v.x;var dy=this.y-v.y;var dz=this.z-v.z;return dx*dx+dy*dy+dz*dz},setEulerFromRotationMatrix:function(m,order){console.error("THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.")},setEulerFromQuaternion:function(q,order){console.error("THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.")},getPositionFromMatrix:function(m){console.warn("THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().");return this.setFromMatrixPosition(m)},getScaleFromMatrix:function(m){console.warn("THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().");return this.setFromMatrixScale(m)},getColumnFromMatrix:function(index,matrix){console.warn("THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().");return this.setFromMatrixColumn(index,matrix)},setFromMatrixPosition:function(m){this.x=m.elements[12];this.y=m.elements[13];this.z=m.elements[14];return this},setFromMatrixScale:function(m){var sx=this.set(m.elements[0],m.elements[1],m.elements[2]).length();var sy=this.set(m.elements[4],m.elements[5],m.elements[6]).length();var sz=this.set(m.elements[8],m.elements[9],m.elements[10]).length();this.x=sx;this.y=sy;this.z=sz;return this},setFromMatrixColumn:function(index,matrix){var offset=index*4;var me=matrix.elements;this.x=me[offset];this.y=me[offset+1];this.z=me[offset+2];return this},equals:function(v){return v.x===this.x&&v.y===this.y&&v.z===this.z},fromArray:function(array,offset){if(offset===undefined)offset=0;this.x=array[offset];this.y=array[offset+1];this.z=array[offset+2];return this},toArray:function(array,offset){if(array===undefined)array=[];if(offset===undefined)offset=0;array[offset]=this.x;array[offset+1]=this.y;array[offset+2]=this.z;return array},fromAttribute:function(attribute,index,offset){if(offset===undefined)offset=0;index=index*attribute.itemSize+offset;this.x=attribute.array[index];this.y=attribute.array[index+1];this.z=attribute.array[index+2];return this}};THREE.Vector4=function(x,y,z,w){this.x=x||0;this.y=y||0;this.z=z||0;this.w=w!==undefined?w:1};THREE.Vector4.prototype={constructor:THREE.Vector4,set:function(x,y,z,w){this.x=x;this.y=y;this.z=z;this.w=w;return this},setX:function(x){this.x=x;return this},setY:function(y){this.y=y;return this},setZ:function(z){this.z=z;return this},setW:function(w){this.w=w;return this},setComponent:function(index,value){switch(index){case 0:this.x=value;break;case 1:this.y=value;break;case 2:this.z=value;break;case 3:this.w=value;break;default:throw new Error("index is out of range: "+index)}},getComponent:function(index){switch(index){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+index)}},clone:function(){return new this.constructor(this.x,this.y,this.z,this.w)},copy:function(v){this.x=v.x;this.y=v.y;this.z=v.z;this.w=v.w!==undefined?v.w:1;return this},add:function(v,w){if(w!==undefined){console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.");return this.addVectors(v,w)}this.x+=v.x;this.y+=v.y;this.z+=v.z;this.w+=v.w;return this},addScalar:function(s){this.x+=s;this.y+=s;this.z+=s;this.w+=s;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},addScaledVector:function(v,s){this.x+=v.x*s;this.y+=v.y*s;this.z+=v.z*s;this.w+=v.w*s;return this},sub:function(v,w){if(w!==undefined){console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.");return this.subVectors(v,w)}this.x-=v.x;this.y-=v.y;this.z-=v.z;this.w-=v.w;return this},subScalar:function(s){this.x-=s;this.y-=s;this.z-=s;this.w-=s;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;this.w=a.w-b.w;return this},multiplyScalar:function(scalar){if(isFinite(scalar)){this.x*=scalar;this.y*=scalar;this.z*=scalar;this.w*=scalar}else{this.x=0;this.y=0;this.z=0;this.w=0}return this},applyMatrix4:function(m){var x=this.x;var y=this.y;var z=this.z;var w=this.w;var e=m.elements;this.x=e[0]*x+e[4]*y+e[8]*z+e[12]*w;this.y=e[1]*x+e[5]*y+e[9]*z+e[13]*w;this.z=e[2]*x+e[6]*y+e[10]*z+e[14]*w;this.w=e[3]*x+e[7]*y+e[11]*z+e[15]*w;return this},divideScalar:function(scalar){return this.multiplyScalar(1/scalar)},setAxisAngleFromQuaternion:function(q){this.w=2*Math.acos(q.w);var s=Math.sqrt(1-q.w*q.w);if(s<1e-4){this.x=1;this.y=0;this.z=0}else{this.x=q.x/s;this.y=q.y/s;this.z=q.z/s}return this},setAxisAngleFromRotationMatrix:function(m){var angle,x,y,z,epsilon=.01,epsilon2=.1,te=m.elements,m11=te[0],m12=te[4],m13=te[8],m21=te[1],m22=te[5],m23=te[9],m31=te[2],m32=te[6],m33=te[10];if(Math.abs(m12-m21)<epsilon&&Math.abs(m13-m31)<epsilon&&Math.abs(m23-m32)<epsilon){if(Math.abs(m12+m21)<epsilon2&&Math.abs(m13+m31)<epsilon2&&Math.abs(m23+m32)<epsilon2&&Math.abs(m11+m22+m33-3)<epsilon2){this.set(1,0,0,0);return this}angle=Math.PI;var xx=(m11+1)/2;var yy=(m22+1)/2;var zz=(m33+1)/2;var xy=(m12+m21)/4;var xz=(m13+m31)/4;var yz=(m23+m32)/4;if(xx>yy&&xx>zz){if(xx<epsilon){x=0;y=.707106781;z=.707106781}else{x=Math.sqrt(xx);y=xy/x;z=xz/x}}else if(yy>zz){if(yy<epsilon){x=.707106781;y=0;z=.707106781}else{y=Math.sqrt(yy);x=xy/y;z=yz/y}}else{if(zz<epsilon){x=.707106781;y=.707106781;z=0}else{z=Math.sqrt(zz);x=xz/z;y=yz/z}}this.set(x,y,z,angle);return this}var s=Math.sqrt((m32-m23)*(m32-m23)+(m13-m31)*(m13-m31)+(m21-m12)*(m21-m12));if(Math.abs(s)<.001)s=1;this.x=(m32-m23)/s;this.y=(m13-m31)/s;this.z=(m21-m12)/s;this.w=Math.acos((m11+m22+m33-1)/2);return this},min:function(v){this.x=Math.min(this.x,v.x);this.y=Math.min(this.y,v.y);this.z=Math.min(this.z,v.z);this.w=Math.min(this.w,v.w);return this},max:function(v){this.x=Math.max(this.x,v.x);this.y=Math.max(this.y,v.y);this.z=Math.max(this.z,v.z);this.w=Math.max(this.w,v.w);return this},clamp:function(min,max){this.x=Math.max(min.x,Math.min(max.x,this.x));this.y=Math.max(min.y,Math.min(max.y,this.y));this.z=Math.max(min.z,Math.min(max.z,this.z));this.w=Math.max(min.w,Math.min(max.w,this.w));return this},clampScalar:function(){var min,max;return function clampScalar(minVal,maxVal){if(min===undefined){min=new THREE.Vector4;max=new THREE.Vector4}min.set(minVal,minVal,minVal,minVal);max.set(maxVal,maxVal,maxVal,maxVal);return this.clamp(min,max)}}(),floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);this.w=Math.floor(this.w);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);this.w=Math.ceil(this.w);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);this.w=Math.round(this.w);return this},roundToZero:function(){this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x);this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y);this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z);this.w=this.w<0?Math.ceil(this.w):Math.floor(this.w);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;this.w=-this.w;return this},dot:function(v){return this.x*v.x+this.y*v.y+this.z*v.z+this.w*v.w},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return this.divideScalar(this.length())},setLength:function(length){return this.multiplyScalar(length/this.length())},lerp:function(v,alpha){this.x+=(v.x-this.x)*alpha;this.y+=(v.y-this.y)*alpha;this.z+=(v.z-this.z)*alpha;this.w+=(v.w-this.w)*alpha;return this},lerpVectors:function(v1,v2,alpha){this.subVectors(v2,v1).multiplyScalar(alpha).add(v1);return this},equals:function(v){return v.x===this.x&&v.y===this.y&&v.z===this.z&&v.w===this.w},fromArray:function(array,offset){if(offset===undefined)offset=0;this.x=array[offset];this.y=array[offset+1];this.z=array[offset+2];this.w=array[offset+3];return this},toArray:function(array,offset){if(array===undefined)array=[];if(offset===undefined)offset=0;array[offset]=this.x;array[offset+1]=this.y;array[offset+2]=this.z;array[offset+3]=this.w;return array},fromAttribute:function(attribute,index,offset){if(offset===undefined)offset=0;index=index*attribute.itemSize+offset;this.x=attribute.array[index];this.y=attribute.array[index+1];this.z=attribute.array[index+2];this.w=attribute.array[index+3];return this}};THREE.Euler=function(x,y,z,order){this._x=x||0;this._y=y||0;this._z=z||0;this._order=order||THREE.Euler.DefaultOrder};THREE.Euler.RotationOrders=["XYZ","YZX","ZXY","XZY","YXZ","ZYX"];THREE.Euler.DefaultOrder="XYZ";THREE.Euler.prototype={constructor:THREE.Euler,get x(){return this._x},set x(value){this._x=value;this.onChangeCallback()},get y(){return this._y},set y(value){this._y=value;this.onChangeCallback()},get z(){return this._z},set z(value){this._z=value;this.onChangeCallback()},get order(){return this._order},set order(value){this._order=value;this.onChangeCallback()},set:function(x,y,z,order){this._x=x;this._y=y;this._z=z;this._order=order||this._order;this.onChangeCallback();return this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._order)},copy:function(euler){this._x=euler._x;this._y=euler._y;this._z=euler._z;this._order=euler._order;this.onChangeCallback();return this},setFromRotationMatrix:function(m,order,update){var clamp=THREE.Math.clamp;var te=m.elements;var m11=te[0],m12=te[4],m13=te[8];var m21=te[1],m22=te[5],m23=te[9];var m31=te[2],m32=te[6],m33=te[10];order=order||this._order;if(order==="XYZ"){this._y=Math.asin(clamp(m13,-1,1));if(Math.abs(m13)<.99999){this._x=Math.atan2(-m23,m33);this._z=Math.atan2(-m12,m11)}else{this._x=Math.atan2(m32,m22);this._z=0}}else if(order==="YXZ"){this._x=Math.asin(-clamp(m23,-1,1));if(Math.abs(m23)<.99999){this._y=Math.atan2(m13,m33);this._z=Math.atan2(m21,m22)}else{this._y=Math.atan2(-m31,m11);this._z=0}}else if(order==="ZXY"){this._x=Math.asin(clamp(m32,-1,1));if(Math.abs(m32)<.99999){this._y=Math.atan2(-m31,m33);this._z=Math.atan2(-m12,m22)}else{this._y=0;this._z=Math.atan2(m21,m11)}}else if(order==="ZYX"){this._y=Math.asin(-clamp(m31,-1,1));if(Math.abs(m31)<.99999){this._x=Math.atan2(m32,m33);this._z=Math.atan2(m21,m11)}else{this._x=0;this._z=Math.atan2(-m12,m22)}}else if(order==="YZX"){this._z=Math.asin(clamp(m21,-1,1));if(Math.abs(m21)<.99999){this._x=Math.atan2(-m23,m22);this._y=Math.atan2(-m31,m11)}else{this._x=0;this._y=Math.atan2(m13,m33)}}else if(order==="XZY"){this._z=Math.asin(-clamp(m12,-1,1));if(Math.abs(m12)<.99999){this._x=Math.atan2(m32,m22);this._y=Math.atan2(m13,m11)}else{this._x=Math.atan2(-m23,m33);this._y=0}}else{console.warn("THREE.Euler: .setFromRotationMatrix() given unsupported order: "+order)}this._order=order;if(update!==false)this.onChangeCallback();return this},setFromQuaternion:function(){var matrix;return function(q,order,update){if(matrix===undefined)matrix=new THREE.Matrix4;matrix.makeRotationFromQuaternion(q);this.setFromRotationMatrix(matrix,order,update);return this}}(),setFromVector3:function(v,order){return this.set(v.x,v.y,v.z,order||this._order)},reorder:function(){var q=new THREE.Quaternion;return function(newOrder){q.setFromEuler(this);this.setFromQuaternion(q,newOrder)}}(),equals:function(euler){return euler._x===this._x&&euler._y===this._y&&euler._z===this._z&&euler._order===this._order},fromArray:function(array){this._x=array[0];this._y=array[1];this._z=array[2];if(array[3]!==undefined)this._order=array[3];this.onChangeCallback();return this},toArray:function(array,offset){if(array===undefined)array=[];if(offset===undefined)offset=0;array[offset]=this._x;array[offset+1]=this._y;array[offset+2]=this._z;array[offset+3]=this._order;return array},toVector3:function(optionalResult){if(optionalResult){return optionalResult.set(this._x,this._y,this._z)}else{return new THREE.Vector3(this._x,this._y,this._z)}},onChange:function(callback){this.onChangeCallback=callback;return this},onChangeCallback:function(){}};THREE.Line3=function(start,end){this.start=start!==undefined?start:new THREE.Vector3;this.end=end!==undefined?end:new THREE.Vector3};THREE.Line3.prototype={constructor:THREE.Line3,set:function(start,end){this.start.copy(start);this.end.copy(end);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(line){this.start.copy(line.start);this.end.copy(line.end);return this},center:function(optionalTarget){var result=optionalTarget||new THREE.Vector3;return result.addVectors(this.start,this.end).multiplyScalar(.5)},delta:function(optionalTarget){var result=optionalTarget||new THREE.Vector3;return result.subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)},at:function(t,optionalTarget){var result=optionalTarget||new THREE.Vector3;return this.delta(result).multiplyScalar(t).add(this.start)},closestPointToPointParameter:function(){var startP=new THREE.Vector3;var startEnd=new THREE.Vector3;return function(point,clampToLine){startP.subVectors(point,this.start);startEnd.subVectors(this.end,this.start);var startEnd2=startEnd.dot(startEnd);var startEnd_startP=startEnd.dot(startP);var t=startEnd_startP/startEnd2;if(clampToLine){t=THREE.Math.clamp(t,0,1)}return t}}(),closestPointToPoint:function(point,clampToLine,optionalTarget){var t=this.closestPointToPointParameter(point,clampToLine);var result=optionalTarget||new THREE.Vector3;return this.delta(result).multiplyScalar(t).add(this.start)},applyMatrix4:function(matrix){this.start.applyMatrix4(matrix);this.end.applyMatrix4(matrix);return this},equals:function(line){return line.start.equals(this.start)&&line.end.equals(this.end)}};THREE.Box2=function(min,max){this.min=min!==undefined?min:new THREE.Vector2(Infinity,Infinity);this.max=max!==undefined?max:new THREE.Vector2(-Infinity,-Infinity)};THREE.Box2.prototype={constructor:THREE.Box2,set:function(min,max){this.min.copy(min);this.max.copy(max);return this},setFromPoints:function(points){this.makeEmpty();for(var i=0,il=points.length;i<il;i++){this.expandByPoint(points[i])}return this},setFromCenterAndSize:function(){var v1=new THREE.Vector2;return function(center,size){var halfSize=v1.copy(size).multiplyScalar(.5);this.min.copy(center).sub(halfSize);this.max.copy(center).add(halfSize);return this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(box){this.min.copy(box.min);this.max.copy(box.max);return this},makeEmpty:function(){this.min.x=this.min.y=Infinity;this.max.x=this.max.y=-Infinity;return this},empty:function(){return this.max.x<this.min.x||this.max.y<this.min.y},center:function(optionalTarget){var result=optionalTarget||new THREE.Vector2;return result.addVectors(this.min,this.max).multiplyScalar(.5)},size:function(optionalTarget){var result=optionalTarget||new THREE.Vector2;return result.subVectors(this.max,this.min)},expandByPoint:function(point){this.min.min(point);this.max.max(point);return this},expandByVector:function(vector){this.min.sub(vector);this.max.add(vector);return this},expandByScalar:function(scalar){this.min.addScalar(-scalar);this.max.addScalar(scalar);return this},containsPoint:function(point){if(point.x<this.min.x||point.x>this.max.x||point.y<this.min.y||point.y>this.max.y){return false}return true},containsBox:function(box){if(this.min.x<=box.min.x&&box.max.x<=this.max.x&&this.min.y<=box.min.y&&box.max.y<=this.max.y){return true}return false},getParameter:function(point,optionalTarget){var result=optionalTarget||new THREE.Vector2;return result.set((point.x-this.min.x)/(this.max.x-this.min.x),(point.y-this.min.y)/(this.max.y-this.min.y))},isIntersectionBox:function(box){if(box.max.x<this.min.x||box.min.x>this.max.x||box.max.y<this.min.y||box.min.y>this.max.y){return false}return true},clampPoint:function(point,optionalTarget){var result=optionalTarget||new THREE.Vector2;return result.copy(point).clamp(this.min,this.max)},distanceToPoint:function(){var v1=new THREE.Vector2;return function(point){var clampedPoint=v1.copy(point).clamp(this.min,this.max);return clampedPoint.sub(point).length()}}(),intersect:function(box){this.min.max(box.min);this.max.min(box.max);return this},union:function(box){this.min.min(box.min);this.max.max(box.max);return this},translate:function(offset){this.min.add(offset);this.max.add(offset);return this},equals:function(box){return box.min.equals(this.min)&&box.max.equals(this.max)}};THREE.Box3=function(min,max){this.min=min!==undefined?min:new THREE.Vector3(Infinity,Infinity,Infinity);this.max=max!==undefined?max:new THREE.Vector3(-Infinity,-Infinity,-Infinity)};THREE.Box3.prototype={constructor:THREE.Box3,set:function(min,max){this.min.copy(min);this.max.copy(max);return this},setFromPoints:function(points){this.makeEmpty();for(var i=0,il=points.length;i<il;i++){this.expandByPoint(points[i])}return this},setFromCenterAndSize:function(){var v1=new THREE.Vector3;return function(center,size){var halfSize=v1.copy(size).multiplyScalar(.5);this.min.copy(center).sub(halfSize);this.max.copy(center).add(halfSize);return this}}(),setFromObject:function(){var v1=new THREE.Vector3;return function(object){var scope=this;object.updateMatrixWorld(true);this.makeEmpty();object.traverse(function(node){var geometry=node.geometry;if(geometry!==undefined){if(geometry instanceof THREE.Geometry){var vertices=geometry.vertices;for(var i=0,il=vertices.length;i<il;i++){v1.copy(vertices[i]);v1.applyMatrix4(node.matrixWorld);scope.expandByPoint(v1)}}else if(geometry instanceof THREE.BufferGeometry&&geometry.attributes["position"]!==undefined){var positions=geometry.attributes["position"].array;for(var i=0,il=positions.length;i<il;i+=3){v1.set(positions[i],positions[i+1],positions[i+2]);v1.applyMatrix4(node.matrixWorld);scope.expandByPoint(v1)}}}});return this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(box){this.min.copy(box.min);this.max.copy(box.max);return this},makeEmpty:function(){this.min.x=this.min.y=this.min.z=Infinity;this.max.x=this.max.y=this.max.z=-Infinity;return this},empty:function(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z},center:function(optionalTarget){var result=optionalTarget||new THREE.Vector3;return result.addVectors(this.min,this.max).multiplyScalar(.5)},size:function(optionalTarget){var result=optionalTarget||new THREE.Vector3;return result.subVectors(this.max,this.min)},expandByPoint:function(point){this.min.min(point);this.max.max(point);return this},expandByVector:function(vector){this.min.sub(vector);this.max.add(vector);return this},expandByScalar:function(scalar){this.min.addScalar(-scalar);this.max.addScalar(scalar);return this},containsPoint:function(point){if(point.x<this.min.x||point.x>this.max.x||point.y<this.min.y||point.y>this.max.y||point.z<this.min.z||point.z>this.max.z){return false}return true},containsBox:function(box){if(this.min.x<=box.min.x&&box.max.x<=this.max.x&&this.min.y<=box.min.y&&box.max.y<=this.max.y&&this.min.z<=box.min.z&&box.max.z<=this.max.z){return true}return false},getParameter:function(point,optionalTarget){var result=optionalTarget||new THREE.Vector3;return result.set((point.x-this.min.x)/(this.max.x-this.min.x),(point.y-this.min.y)/(this.max.y-this.min.y),(point.z-this.min.z)/(this.max.z-this.min.z))},isIntersectionBox:function(box){if(box.max.x<this.min.x||box.min.x>this.max.x||box.max.y<this.min.y||box.min.y>this.max.y||box.max.z<this.min.z||box.min.z>this.max.z){return false}return true},clampPoint:function(point,optionalTarget){var result=optionalTarget||new THREE.Vector3;return result.copy(point).clamp(this.min,this.max)},distanceToPoint:function(){var v1=new THREE.Vector3;return function(point){var clampedPoint=v1.copy(point).clamp(this.min,this.max);return clampedPoint.sub(point).length()}}(),getBoundingSphere:function(){var v1=new THREE.Vector3;return function(optionalTarget){var result=optionalTarget||new THREE.Sphere;result.center=this.center();result.radius=this.size(v1).length()*.5;return result}}(),intersect:function(box){this.min.max(box.min);this.max.min(box.max);return this},union:function(box){this.min.min(box.min);this.max.max(box.max);return this},applyMatrix4:function(){var points=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];return function(matrix){points[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(matrix);points[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(matrix);points[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(matrix);points[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(matrix);points[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(matrix);points[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(matrix);points[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(matrix);points[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(matrix);this.makeEmpty();this.setFromPoints(points);return this}}(),translate:function(offset){this.min.add(offset);this.max.add(offset);return this},equals:function(box){return box.min.equals(this.min)&&box.max.equals(this.max)}};THREE.Matrix3=function(){this.elements=new Float32Array([1,0,0,0,1,0,0,0,1]);if(arguments.length>0){console.error("THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.")}};THREE.Matrix3.prototype={constructor:THREE.Matrix3,set:function(n11,n12,n13,n21,n22,n23,n31,n32,n33){var te=this.elements;te[0]=n11;te[3]=n12;te[6]=n13;te[1]=n21;te[4]=n22;te[7]=n23;te[2]=n31;te[5]=n32;te[8]=n33;return this},identity:function(){this.set(1,0,0,0,1,0,0,0,1);return this},clone:function(){return(new this.constructor).fromArray(this.elements)},copy:function(m){var me=m.elements;this.set(me[0],me[3],me[6],me[1],me[4],me[7],me[2],me[5],me[8]);return this},multiplyVector3:function(vector){console.warn("THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.");return vector.applyMatrix3(this)},multiplyVector3Array:function(a){console.warn("THREE.Matrix3: .multiplyVector3Array() has been renamed. Use matrix.applyToVector3Array( array ) instead.");return this.applyToVector3Array(a)},applyToVector3Array:function(){var v1;return function(array,offset,length){if(v1===undefined)v1=new THREE.Vector3;if(offset===undefined)offset=0;if(length===undefined)length=array.length;for(var i=0,j=offset;i<length;i+=3,j+=3){v1.fromArray(array,j);v1.applyMatrix3(this);v1.toArray(array,j)}return array}}(),applyToBuffer:function(){var v1;return function applyToBuffer(buffer,offset,length){if(v1===undefined)v1=new THREE.Vector3;if(offset===undefined)offset=0;if(length===undefined)length=buffer.length/buffer.itemSize;for(var i=0,j=offset;i<length;i++,j++){v1.x=buffer.getX(j);v1.y=buffer.getY(j);v1.z=buffer.getZ(j);v1.applyMatrix3(this);buffer.setXYZ(v1.x,v1.y,v1.z)}return buffer}}(),multiplyScalar:function(s){var te=this.elements;te[0]*=s;te[3]*=s;te[6]*=s;te[1]*=s;te[4]*=s;te[7]*=s;te[2]*=s;te[5]*=s;te[8]*=s;return this},determinant:function(){var te=this.elements;var a=te[0],b=te[1],c=te[2],d=te[3],e=te[4],f=te[5],g=te[6],h=te[7],i=te[8];return a*e*i-a*f*h-b*d*i+b*f*g+c*d*h-c*e*g},getInverse:function(matrix,throwOnInvertible){var me=matrix.elements;var te=this.elements;te[0]=me[10]*me[5]-me[6]*me[9];te[1]=-me[10]*me[1]+me[2]*me[9];te[2]=me[6]*me[1]-me[2]*me[5];te[3]=-me[10]*me[4]+me[6]*me[8];te[4]=me[10]*me[0]-me[2]*me[8];te[5]=-me[6]*me[0]+me[2]*me[4];te[6]=me[9]*me[4]-me[5]*me[8];te[7]=-me[9]*me[0]+me[1]*me[8];te[8]=me[5]*me[0]-me[1]*me[4];var det=me[0]*te[0]+me[1]*te[3]+me[2]*te[6];if(det===0){var msg="Matrix3.getInverse(): can't invert matrix, determinant is 0";if(throwOnInvertible||false){throw new Error(msg)}else{console.warn(msg)}this.identity();return this}this.multiplyScalar(1/det);return this},transpose:function(){var tmp,m=this.elements;tmp=m[1];m[1]=m[3];m[3]=tmp;tmp=m[2];m[2]=m[6];m[6]=tmp;tmp=m[5];m[5]=m[7];m[7]=tmp;return this},flattenToArrayOffset:function(array,offset){var te=this.elements;array[offset]=te[0];array[offset+1]=te[1];array[offset+2]=te[2];array[offset+3]=te[3];array[offset+4]=te[4];array[offset+5]=te[5];array[offset+6]=te[6];array[offset+7]=te[7];array[offset+8]=te[8];return array},getNormalMatrix:function(m){this.getInverse(m).transpose();return this},transposeIntoArray:function(r){var m=this.elements;r[0]=m[0];r[1]=m[3];r[2]=m[6];r[3]=m[1];r[4]=m[4];r[5]=m[7];r[6]=m[2];r[7]=m[5];r[8]=m[8];return this},fromArray:function(array){this.elements.set(array);return this},toArray:function(){var te=this.elements;return[te[0],te[1],te[2],te[3],te[4],te[5],te[6],te[7],te[8]]}};THREE.Matrix4=function(){this.elements=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]);if(arguments.length>0){console.error("THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.")}};THREE.Matrix4.prototype={constructor:THREE.Matrix4,set:function(n11,n12,n13,n14,n21,n22,n23,n24,n31,n32,n33,n34,n41,n42,n43,n44){var te=this.elements;te[0]=n11;te[4]=n12;te[8]=n13;te[12]=n14;te[1]=n21;te[5]=n22;te[9]=n23;te[13]=n24;te[2]=n31;te[6]=n32;te[10]=n33;te[14]=n34;te[3]=n41;te[7]=n42;te[11]=n43;te[15]=n44;return this},identity:function(){this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return this},clone:function(){return(new THREE.Matrix4).fromArray(this.elements)},copy:function(m){this.elements.set(m.elements);return this},extractPosition:function(m){console.warn("THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().");return this.copyPosition(m)},copyPosition:function(m){var te=this.elements;var me=m.elements;te[12]=me[12];te[13]=me[13];te[14]=me[14];return this},extractBasis:function(xAxis,yAxis,zAxis){var te=this.elements;xAxis.set(te[0],te[1],te[2]);yAxis.set(te[4],te[5],te[6]);zAxis.set(te[8],te[9],te[10]);return this},makeBasis:function(xAxis,yAxis,zAxis){this.set(xAxis.x,yAxis.x,zAxis.x,0,xAxis.y,yAxis.y,zAxis.y,0,xAxis.z,yAxis.z,zAxis.z,0,0,0,0,1);return this},extractRotation:function(){var v1;return function(m){if(v1===undefined)v1=new THREE.Vector3;var te=this.elements;var me=m.elements;var scaleX=1/v1.set(me[0],me[1],me[2]).length();var scaleY=1/v1.set(me[4],me[5],me[6]).length();var scaleZ=1/v1.set(me[8],me[9],me[10]).length();te[0]=me[0]*scaleX;te[1]=me[1]*scaleX;te[2]=me[2]*scaleX;te[4]=me[4]*scaleY;te[5]=me[5]*scaleY;te[6]=me[6]*scaleY;te[8]=me[8]*scaleZ;te[9]=me[9]*scaleZ;te[10]=me[10]*scaleZ;return this}}(),makeRotationFromEuler:function(euler){if(euler instanceof THREE.Euler===false){console.error("THREE.Matrix: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.")}var te=this.elements;var x=euler.x,y=euler.y,z=euler.z;var a=Math.cos(x),b=Math.sin(x);var c=Math.cos(y),d=Math.sin(y);var e=Math.cos(z),f=Math.sin(z);if(euler.order==="XYZ"){var ae=a*e,af=a*f,be=b*e,bf=b*f;te[0]=c*e;te[4]=-c*f;te[8]=d;te[1]=af+be*d;te[5]=ae-bf*d;te[9]=-b*c;te[2]=bf-ae*d;te[6]=be+af*d;te[10]=a*c}else if(euler.order==="YXZ"){var ce=c*e,cf=c*f,de=d*e,df=d*f;te[0]=ce+df*b;te[4]=de*b-cf;te[8]=a*d;te[1]=a*f;te[5]=a*e;te[9]=-b;te[2]=cf*b-de;te[6]=df+ce*b;te[10]=a*c}else if(euler.order==="ZXY"){var ce=c*e,cf=c*f,de=d*e,df=d*f;te[0]=ce-df*b;te[4]=-a*f;te[8]=de+cf*b;te[1]=cf+de*b;te[5]=a*e;te[9]=df-ce*b;te[2]=-a*d;te[6]=b;te[10]=a*c}else if(euler.order==="ZYX"){var ae=a*e,af=a*f,be=b*e,bf=b*f;te[0]=c*e;te[4]=be*d-af;te[8]=ae*d+bf;te[1]=c*f;te[5]=bf*d+ae;te[9]=af*d-be;te[2]=-d;te[6]=b*c;te[10]=a*c}else if(euler.order==="YZX"){var ac=a*c,ad=a*d,bc=b*c,bd=b*d;te[0]=c*e;te[4]=bd-ac*f;te[8]=bc*f+ad;te[1]=f;te[5]=a*e;te[9]=-b*e;te[2]=-d*e;te[6]=ad*f+bc;te[10]=ac-bd*f}else if(euler.order==="XZY"){var ac=a*c,ad=a*d,bc=b*c,bd=b*d;te[0]=c*e;te[4]=-f;te[8]=d*e;te[1]=ac*f+bd;te[5]=a*e;te[9]=ad*f-bc;te[2]=bc*f-ad;te[6]=b*e;te[10]=bd*f+ac}te[3]=0;te[7]=0;te[11]=0;te[12]=0;te[13]=0;te[14]=0;te[15]=1;return this},setRotationFromQuaternion:function(q){console.warn("THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().");return this.makeRotationFromQuaternion(q)},makeRotationFromQuaternion:function(q){var te=this.elements;var x=q.x,y=q.y,z=q.z,w=q.w;var x2=x+x,y2=y+y,z2=z+z;var xx=x*x2,xy=x*y2,xz=x*z2;var yy=y*y2,yz=y*z2,zz=z*z2;var wx=w*x2,wy=w*y2,wz=w*z2;te[0]=1-(yy+zz);te[4]=xy-wz;te[8]=xz+wy;te[1]=xy+wz;te[5]=1-(xx+zz);te[9]=yz-wx;te[2]=xz-wy;te[6]=yz+wx;te[10]=1-(xx+yy);te[3]=0;te[7]=0;te[11]=0;te[12]=0;te[13]=0;te[14]=0;te[15]=1;return this},lookAt:function(){var x,y,z;return function(eye,target,up){if(x===undefined)x=new THREE.Vector3;if(y===undefined)y=new THREE.Vector3;if(z===undefined)z=new THREE.Vector3;var te=this.elements;z.subVectors(eye,target).normalize();if(z.lengthSq()===0){z.z=1}x.crossVectors(up,z).normalize();if(x.lengthSq()===0){z.x+=1e-4;x.crossVectors(up,z).normalize()}y.crossVectors(z,x);te[0]=x.x;te[4]=y.x;te[8]=z.x;te[1]=x.y;te[5]=y.y;te[9]=z.y;te[2]=x.z;te[6]=y.z;te[10]=z.z;return this}}(),multiply:function(m,n){if(n!==undefined){console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.");return this.multiplyMatrices(m,n)}return this.multiplyMatrices(this,m)},multiplyMatrices:function(a,b){
        var ae=a.elements;var be=b.elements;var te=this.elements;var a11=ae[0],a12=ae[4],a13=ae[8],a14=ae[12];var a21=ae[1],a22=ae[5],a23=ae[9],a24=ae[13];var a31=ae[2],a32=ae[6],a33=ae[10],a34=ae[14];var a41=ae[3],a42=ae[7],a43=ae[11],a44=ae[15];var b11=be[0],b12=be[4],b13=be[8],b14=be[12];var b21=be[1],b22=be[5],b23=be[9],b24=be[13];var b31=be[2],b32=be[6],b33=be[10],b34=be[14];var b41=be[3],b42=be[7],b43=be[11],b44=be[15];te[0]=a11*b11+a12*b21+a13*b31+a14*b41;te[4]=a11*b12+a12*b22+a13*b32+a14*b42;te[8]=a11*b13+a12*b23+a13*b33+a14*b43;te[12]=a11*b14+a12*b24+a13*b34+a14*b44;te[1]=a21*b11+a22*b21+a23*b31+a24*b41;te[5]=a21*b12+a22*b22+a23*b32+a24*b42;te[9]=a21*b13+a22*b23+a23*b33+a24*b43;te[13]=a21*b14+a22*b24+a23*b34+a24*b44;te[2]=a31*b11+a32*b21+a33*b31+a34*b41;te[6]=a31*b12+a32*b22+a33*b32+a34*b42;te[10]=a31*b13+a32*b23+a33*b33+a34*b43;te[14]=a31*b14+a32*b24+a33*b34+a34*b44;te[3]=a41*b11+a42*b21+a43*b31+a44*b41;te[7]=a41*b12+a42*b22+a43*b32+a44*b42;te[11]=a41*b13+a42*b23+a43*b33+a44*b43;te[15]=a41*b14+a42*b24+a43*b34+a44*b44;return this},multiplyToArray:function(a,b,r){var te=this.elements;this.multiplyMatrices(a,b);r[0]=te[0];r[1]=te[1];r[2]=te[2];r[3]=te[3];r[4]=te[4];r[5]=te[5];r[6]=te[6];r[7]=te[7];r[8]=te[8];r[9]=te[9];r[10]=te[10];r[11]=te[11];r[12]=te[12];r[13]=te[13];r[14]=te[14];r[15]=te[15];return this},multiplyScalar:function(s){var te=this.elements;te[0]*=s;te[4]*=s;te[8]*=s;te[12]*=s;te[1]*=s;te[5]*=s;te[9]*=s;te[13]*=s;te[2]*=s;te[6]*=s;te[10]*=s;te[14]*=s;te[3]*=s;te[7]*=s;te[11]*=s;te[15]*=s;return this},multiplyVector3:function(vector){console.warn("THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) or vector.applyProjection( matrix ) instead.");return vector.applyProjection(this)},multiplyVector4:function(vector){console.warn("THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.");return vector.applyMatrix4(this)},multiplyVector3Array:function(a){console.warn("THREE.Matrix4: .multiplyVector3Array() has been renamed. Use matrix.applyToVector3Array( array ) instead.");return this.applyToVector3Array(a)},applyToVector3Array:function(){var v1;return function(array,offset,length){if(v1===undefined)v1=new THREE.Vector3;if(offset===undefined)offset=0;if(length===undefined)length=array.length;for(var i=0,j=offset;i<length;i+=3,j+=3){v1.fromArray(array,j);v1.applyMatrix4(this);v1.toArray(array,j)}return array}}(),applyToBuffer:function(){var v1;return function applyToBuffer(buffer,offset,length){if(v1===undefined)v1=new THREE.Vector3;if(offset===undefined)offset=0;if(length===undefined)length=buffer.length/buffer.itemSize;for(var i=0,j=offset;i<length;i++,j++){v1.x=buffer.getX(j);v1.y=buffer.getY(j);v1.z=buffer.getZ(j);v1.applyMatrix4(this);buffer.setXYZ(v1.x,v1.y,v1.z)}return buffer}}(),rotateAxis:function(v){console.warn("THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.");v.transformDirection(this)},crossVector:function(vector){console.warn("THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.");return vector.applyMatrix4(this)},determinant:function(){var te=this.elements;var n11=te[0],n12=te[4],n13=te[8],n14=te[12];var n21=te[1],n22=te[5],n23=te[9],n24=te[13];var n31=te[2],n32=te[6],n33=te[10],n34=te[14];var n41=te[3],n42=te[7],n43=te[11],n44=te[15];return n41*(+n14*n23*n32-n13*n24*n32-n14*n22*n33+n12*n24*n33+n13*n22*n34-n12*n23*n34)+n42*(+n11*n23*n34-n11*n24*n33+n14*n21*n33-n13*n21*n34+n13*n24*n31-n14*n23*n31)+n43*(+n11*n24*n32-n11*n22*n34-n14*n21*n32+n12*n21*n34+n14*n22*n31-n12*n24*n31)+n44*(-n13*n22*n31-n11*n23*n32+n11*n22*n33+n13*n21*n32-n12*n21*n33+n12*n23*n31)},transpose:function(){var te=this.elements;var tmp;tmp=te[1];te[1]=te[4];te[4]=tmp;tmp=te[2];te[2]=te[8];te[8]=tmp;tmp=te[6];te[6]=te[9];te[9]=tmp;tmp=te[3];te[3]=te[12];te[12]=tmp;tmp=te[7];te[7]=te[13];te[13]=tmp;tmp=te[11];te[11]=te[14];te[14]=tmp;return this},flattenToArrayOffset:function(array,offset){var te=this.elements;array[offset]=te[0];array[offset+1]=te[1];array[offset+2]=te[2];array[offset+3]=te[3];array[offset+4]=te[4];array[offset+5]=te[5];array[offset+6]=te[6];array[offset+7]=te[7];array[offset+8]=te[8];array[offset+9]=te[9];array[offset+10]=te[10];array[offset+11]=te[11];array[offset+12]=te[12];array[offset+13]=te[13];array[offset+14]=te[14];array[offset+15]=te[15];return array},getPosition:function(){var v1;return function(){if(v1===undefined)v1=new THREE.Vector3;console.warn("THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.");var te=this.elements;return v1.set(te[12],te[13],te[14])}}(),setPosition:function(v){var te=this.elements;te[12]=v.x;te[13]=v.y;te[14]=v.z;return this},getInverse:function(m,throwOnInvertible){var te=this.elements;var me=m.elements;var n11=me[0],n12=me[4],n13=me[8],n14=me[12];var n21=me[1],n22=me[5],n23=me[9],n24=me[13];var n31=me[2],n32=me[6],n33=me[10],n34=me[14];var n41=me[3],n42=me[7],n43=me[11],n44=me[15];te[0]=n23*n34*n42-n24*n33*n42+n24*n32*n43-n22*n34*n43-n23*n32*n44+n22*n33*n44;te[4]=n14*n33*n42-n13*n34*n42-n14*n32*n43+n12*n34*n43+n13*n32*n44-n12*n33*n44;te[8]=n13*n24*n42-n14*n23*n42+n14*n22*n43-n12*n24*n43-n13*n22*n44+n12*n23*n44;te[12]=n14*n23*n32-n13*n24*n32-n14*n22*n33+n12*n24*n33+n13*n22*n34-n12*n23*n34;te[1]=n24*n33*n41-n23*n34*n41-n24*n31*n43+n21*n34*n43+n23*n31*n44-n21*n33*n44;te[5]=n13*n34*n41-n14*n33*n41+n14*n31*n43-n11*n34*n43-n13*n31*n44+n11*n33*n44;te[9]=n14*n23*n41-n13*n24*n41-n14*n21*n43+n11*n24*n43+n13*n21*n44-n11*n23*n44;te[13]=n13*n24*n31-n14*n23*n31+n14*n21*n33-n11*n24*n33-n13*n21*n34+n11*n23*n34;te[2]=n22*n34*n41-n24*n32*n41+n24*n31*n42-n21*n34*n42-n22*n31*n44+n21*n32*n44;te[6]=n14*n32*n41-n12*n34*n41-n14*n31*n42+n11*n34*n42+n12*n31*n44-n11*n32*n44;te[10]=n12*n24*n41-n14*n22*n41+n14*n21*n42-n11*n24*n42-n12*n21*n44+n11*n22*n44;te[14]=n14*n22*n31-n12*n24*n31-n14*n21*n32+n11*n24*n32+n12*n21*n34-n11*n22*n34;te[3]=n23*n32*n41-n22*n33*n41-n23*n31*n42+n21*n33*n42+n22*n31*n43-n21*n32*n43;te[7]=n12*n33*n41-n13*n32*n41+n13*n31*n42-n11*n33*n42-n12*n31*n43+n11*n32*n43;te[11]=n13*n22*n41-n12*n23*n41-n13*n21*n42+n11*n23*n42+n12*n21*n43-n11*n22*n43;te[15]=n12*n23*n31-n13*n22*n31+n13*n21*n32-n11*n23*n32-n12*n21*n33+n11*n22*n33;var det=n11*te[0]+n21*te[4]+n31*te[8]+n41*te[12];if(det===0){var msg="THREE.Matrix4.getInverse(): can't invert matrix, determinant is 0";if(throwOnInvertible||false){throw new Error(msg)}else{console.warn(msg)}this.identity();return this}this.multiplyScalar(1/det);return this},translate:function(v){console.error("THREE.Matrix4: .translate() has been removed.")},rotateX:function(angle){console.error("THREE.Matrix4: .rotateX() has been removed.")},rotateY:function(angle){console.error("THREE.Matrix4: .rotateY() has been removed.")},rotateZ:function(angle){console.error("THREE.Matrix4: .rotateZ() has been removed.")},rotateByAxis:function(axis,angle){console.error("THREE.Matrix4: .rotateByAxis() has been removed.")},scale:function(v){var te=this.elements;var x=v.x,y=v.y,z=v.z;te[0]*=x;te[4]*=y;te[8]*=z;te[1]*=x;te[5]*=y;te[9]*=z;te[2]*=x;te[6]*=y;te[10]*=z;te[3]*=x;te[7]*=y;te[11]*=z;return this},getMaxScaleOnAxis:function(){var te=this.elements;var scaleXSq=te[0]*te[0]+te[1]*te[1]+te[2]*te[2];var scaleYSq=te[4]*te[4]+te[5]*te[5]+te[6]*te[6];var scaleZSq=te[8]*te[8]+te[9]*te[9]+te[10]*te[10];return Math.sqrt(Math.max(scaleXSq,scaleYSq,scaleZSq))},makeTranslation:function(x,y,z){this.set(1,0,0,x,0,1,0,y,0,0,1,z,0,0,0,1);return this},makeRotationX:function(theta){var c=Math.cos(theta),s=Math.sin(theta);this.set(1,0,0,0,0,c,-s,0,0,s,c,0,0,0,0,1);return this},makeRotationY:function(theta){var c=Math.cos(theta),s=Math.sin(theta);this.set(c,0,s,0,0,1,0,0,-s,0,c,0,0,0,0,1);return this},makeRotationZ:function(theta){var c=Math.cos(theta),s=Math.sin(theta);this.set(c,-s,0,0,s,c,0,0,0,0,1,0,0,0,0,1);return this},makeRotationAxis:function(axis,angle){var c=Math.cos(angle);var s=Math.sin(angle);var t=1-c;var x=axis.x,y=axis.y,z=axis.z;var tx=t*x,ty=t*y;this.set(tx*x+c,tx*y-s*z,tx*z+s*y,0,tx*y+s*z,ty*y+c,ty*z-s*x,0,tx*z-s*y,ty*z+s*x,t*z*z+c,0,0,0,0,1);return this},makeScale:function(x,y,z){this.set(x,0,0,0,0,y,0,0,0,0,z,0,0,0,0,1);return this},compose:function(position,quaternion,scale){this.makeRotationFromQuaternion(quaternion);this.scale(scale);this.setPosition(position);return this},decompose:function(){var vector,matrix;return function(position,quaternion,scale){if(vector===undefined)vector=new THREE.Vector3;if(matrix===undefined)matrix=new THREE.Matrix4;var te=this.elements;var sx=vector.set(te[0],te[1],te[2]).length();var sy=vector.set(te[4],te[5],te[6]).length();var sz=vector.set(te[8],te[9],te[10]).length();var det=this.determinant();if(det<0){sx=-sx}position.x=te[12];position.y=te[13];position.z=te[14];matrix.elements.set(this.elements);var invSX=1/sx;var invSY=1/sy;var invSZ=1/sz;matrix.elements[0]*=invSX;matrix.elements[1]*=invSX;matrix.elements[2]*=invSX;matrix.elements[4]*=invSY;matrix.elements[5]*=invSY;matrix.elements[6]*=invSY;matrix.elements[8]*=invSZ;matrix.elements[9]*=invSZ;matrix.elements[10]*=invSZ;quaternion.setFromRotationMatrix(matrix);scale.x=sx;scale.y=sy;scale.z=sz;return this}}(),makeFrustum:function(left,right,bottom,top,near,far){var te=this.elements;var x=2*near/(right-left);var y=2*near/(top-bottom);var a=(right+left)/(right-left);var b=(top+bottom)/(top-bottom);var c=-(far+near)/(far-near);var d=-2*far*near/(far-near);te[0]=x;te[4]=0;te[8]=a;te[12]=0;te[1]=0;te[5]=y;te[9]=b;te[13]=0;te[2]=0;te[6]=0;te[10]=c;te[14]=d;te[3]=0;te[7]=0;te[11]=-1;te[15]=0;return this},makePerspective:function(fov,aspect,near,far){var ymax=near*Math.tan(THREE.Math.degToRad(fov*.5));var ymin=-ymax;var xmin=ymin*aspect;var xmax=ymax*aspect;return this.makeFrustum(xmin,xmax,ymin,ymax,near,far)},makeOrthographic:function(left,right,top,bottom,near,far){var te=this.elements;var w=right-left;var h=top-bottom;var p=far-near;var x=(right+left)/w;var y=(top+bottom)/h;var z=(far+near)/p;te[0]=2/w;te[4]=0;te[8]=0;te[12]=-x;te[1]=0;te[5]=2/h;te[9]=0;te[13]=-y;te[2]=0;te[6]=0;te[10]=-2/p;te[14]=-z;te[3]=0;te[7]=0;te[11]=0;te[15]=1;return this},equals:function(matrix){var te=this.elements;var me=matrix.elements;for(var i=0;i<16;i++){if(te[i]!==me[i])return false}return true},fromArray:function(array){this.elements.set(array);return this},toArray:function(){var te=this.elements;return[te[0],te[1],te[2],te[3],te[4],te[5],te[6],te[7],te[8],te[9],te[10],te[11],te[12],te[13],te[14],te[15]]}};THREE.Ray=function(origin,direction){this.origin=origin!==undefined?origin:new THREE.Vector3;this.direction=direction!==undefined?direction:new THREE.Vector3};THREE.Ray.prototype={constructor:THREE.Ray,set:function(origin,direction){this.origin.copy(origin);this.direction.copy(direction);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(ray){this.origin.copy(ray.origin);this.direction.copy(ray.direction);return this},at:function(t,optionalTarget){var result=optionalTarget||new THREE.Vector3;return result.copy(this.direction).multiplyScalar(t).add(this.origin)},recast:function(){var v1=new THREE.Vector3;return function(t){this.origin.copy(this.at(t,v1));return this}}(),closestPointToPoint:function(point,optionalTarget){var result=optionalTarget||new THREE.Vector3;result.subVectors(point,this.origin);var directionDistance=result.dot(this.direction);if(directionDistance<0){return result.copy(this.origin)}return result.copy(this.direction).multiplyScalar(directionDistance).add(this.origin)},distanceToPoint:function(point){return Math.sqrt(this.distanceSqToPoint(point))},distanceSqToPoint:function(){var v1=new THREE.Vector3;return function(point){var directionDistance=v1.subVectors(point,this.origin).dot(this.direction);if(directionDistance<0){return this.origin.distanceToSquared(point)}v1.copy(this.direction).multiplyScalar(directionDistance).add(this.origin);return v1.distanceToSquared(point)}}(),distanceSqToSegment:function(){var segCenter=new THREE.Vector3;var segDir=new THREE.Vector3;var diff=new THREE.Vector3;return function(v0,v1,optionalPointOnRay,optionalPointOnSegment){segCenter.copy(v0).add(v1).multiplyScalar(.5);segDir.copy(v1).sub(v0).normalize();diff.copy(this.origin).sub(segCenter);var segExtent=v0.distanceTo(v1)*.5;var a01=-this.direction.dot(segDir);var b0=diff.dot(this.direction);var b1=-diff.dot(segDir);var c=diff.lengthSq();var det=Math.abs(1-a01*a01);var s0,s1,sqrDist,extDet;if(det>0){s0=a01*b1-b0;s1=a01*b0-b1;extDet=segExtent*det;if(s0>=0){if(s1>=-extDet){if(s1<=extDet){var invDet=1/det;s0*=invDet;s1*=invDet;sqrDist=s0*(s0+a01*s1+2*b0)+s1*(a01*s0+s1+2*b1)+c}else{s1=segExtent;s0=Math.max(0,-(a01*s1+b0));sqrDist=-s0*s0+s1*(s1+2*b1)+c}}else{s1=-segExtent;s0=Math.max(0,-(a01*s1+b0));sqrDist=-s0*s0+s1*(s1+2*b1)+c}}else{if(s1<=-extDet){s0=Math.max(0,-(-a01*segExtent+b0));s1=s0>0?-segExtent:Math.min(Math.max(-segExtent,-b1),segExtent);sqrDist=-s0*s0+s1*(s1+2*b1)+c}else if(s1<=extDet){s0=0;s1=Math.min(Math.max(-segExtent,-b1),segExtent);sqrDist=s1*(s1+2*b1)+c}else{s0=Math.max(0,-(a01*segExtent+b0));s1=s0>0?segExtent:Math.min(Math.max(-segExtent,-b1),segExtent);sqrDist=-s0*s0+s1*(s1+2*b1)+c}}}else{s1=a01>0?-segExtent:segExtent;s0=Math.max(0,-(a01*s1+b0));sqrDist=-s0*s0+s1*(s1+2*b1)+c}if(optionalPointOnRay){optionalPointOnRay.copy(this.direction).multiplyScalar(s0).add(this.origin)}if(optionalPointOnSegment){optionalPointOnSegment.copy(segDir).multiplyScalar(s1).add(segCenter)}return sqrDist}}(),isIntersectionSphere:function(sphere){return this.distanceToPoint(sphere.center)<=sphere.radius},intersectSphere:function(){var v1=new THREE.Vector3;return function(sphere,optionalTarget){v1.subVectors(sphere.center,this.origin);var tca=v1.dot(this.direction);var d2=v1.dot(v1)-tca*tca;var radius2=sphere.radius*sphere.radius;if(d2>radius2)return null;var thc=Math.sqrt(radius2-d2);var t0=tca-thc;var t1=tca+thc;if(t0<0&&t1<0)return null;if(t0<0)return this.at(t1,optionalTarget);return this.at(t0,optionalTarget)}}(),isIntersectionPlane:function(plane){var distToPoint=plane.distanceToPoint(this.origin);if(distToPoint===0){return true}var denominator=plane.normal.dot(this.direction);if(denominator*distToPoint<0){return true}return false},distanceToPlane:function(plane){var denominator=plane.normal.dot(this.direction);if(denominator===0){if(plane.distanceToPoint(this.origin)===0){return 0}return null}var t=-(this.origin.dot(plane.normal)+plane.constant)/denominator;return t>=0?t:null},intersectPlane:function(plane,optionalTarget){var t=this.distanceToPlane(plane);if(t===null){return null}return this.at(t,optionalTarget)},isIntersectionBox:function(){var v=new THREE.Vector3;return function(box){return this.intersectBox(box,v)!==null}}(),intersectBox:function(box,optionalTarget){var tmin,tmax,tymin,tymax,tzmin,tzmax;var invdirx=1/this.direction.x,invdiry=1/this.direction.y,invdirz=1/this.direction.z;var origin=this.origin;if(invdirx>=0){tmin=(box.min.x-origin.x)*invdirx;tmax=(box.max.x-origin.x)*invdirx}else{tmin=(box.max.x-origin.x)*invdirx;tmax=(box.min.x-origin.x)*invdirx}if(invdiry>=0){tymin=(box.min.y-origin.y)*invdiry;tymax=(box.max.y-origin.y)*invdiry}else{tymin=(box.max.y-origin.y)*invdiry;tymax=(box.min.y-origin.y)*invdiry}if(tmin>tymax||tymin>tmax)return null;if(tymin>tmin||tmin!==tmin)tmin=tymin;if(tymax<tmax||tmax!==tmax)tmax=tymax;if(invdirz>=0){tzmin=(box.min.z-origin.z)*invdirz;tzmax=(box.max.z-origin.z)*invdirz}else{tzmin=(box.max.z-origin.z)*invdirz;tzmax=(box.min.z-origin.z)*invdirz}if(tmin>tzmax||tzmin>tmax)return null;if(tzmin>tmin||tmin!==tmin)tmin=tzmin;if(tzmax<tmax||tmax!==tmax)tmax=tzmax;if(tmax<0)return null;return this.at(tmin>=0?tmin:tmax,optionalTarget)},intersectTriangle:function(){var diff=new THREE.Vector3;var edge1=new THREE.Vector3;var edge2=new THREE.Vector3;var normal=new THREE.Vector3;return function(a,b,c,backfaceCulling,optionalTarget){edge1.subVectors(b,a);edge2.subVectors(c,a);normal.crossVectors(edge1,edge2);var DdN=this.direction.dot(normal);var sign;if(DdN>0){if(backfaceCulling)return null;sign=1}else if(DdN<0){sign=-1;DdN=-DdN}else{return null}diff.subVectors(this.origin,a);var DdQxE2=sign*this.direction.dot(edge2.crossVectors(diff,edge2));if(DdQxE2<0){return null}var DdE1xQ=sign*this.direction.dot(edge1.cross(diff));if(DdE1xQ<0){return null}if(DdQxE2+DdE1xQ>DdN){return null}var QdN=-sign*diff.dot(normal);if(QdN<0){return null}return this.at(QdN/DdN,optionalTarget)}}(),applyMatrix4:function(matrix4){this.direction.add(this.origin).applyMatrix4(matrix4);this.origin.applyMatrix4(matrix4);this.direction.sub(this.origin);this.direction.normalize();return this},equals:function(ray){return ray.origin.equals(this.origin)&&ray.direction.equals(this.direction)}};THREE.Sphere=function(center,radius){this.center=center!==undefined?center:new THREE.Vector3;this.radius=radius!==undefined?radius:0};THREE.Sphere.prototype={constructor:THREE.Sphere,set:function(center,radius){this.center.copy(center);this.radius=radius;return this},setFromPoints:function(){var box=new THREE.Box3;return function(points,optionalCenter){var center=this.center;if(optionalCenter!==undefined){center.copy(optionalCenter)}else{box.setFromPoints(points).center(center)}var maxRadiusSq=0;for(var i=0,il=points.length;i<il;i++){maxRadiusSq=Math.max(maxRadiusSq,center.distanceToSquared(points[i]))}this.radius=Math.sqrt(maxRadiusSq);return this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(sphere){this.center.copy(sphere.center);this.radius=sphere.radius;return this},empty:function(){return this.radius<=0},containsPoint:function(point){return point.distanceToSquared(this.center)<=this.radius*this.radius},distanceToPoint:function(point){return point.distanceTo(this.center)-this.radius},intersectsSphere:function(sphere){var radiusSum=this.radius+sphere.radius;return sphere.center.distanceToSquared(this.center)<=radiusSum*radiusSum},clampPoint:function(point,optionalTarget){var deltaLengthSq=this.center.distanceToSquared(point);var result=optionalTarget||new THREE.Vector3;result.copy(point);if(deltaLengthSq>this.radius*this.radius){result.sub(this.center).normalize();result.multiplyScalar(this.radius).add(this.center)}return result},getBoundingBox:function(optionalTarget){var box=optionalTarget||new THREE.Box3;box.set(this.center,this.center);box.expandByScalar(this.radius);return box},applyMatrix4:function(matrix){this.center.applyMatrix4(matrix);this.radius=this.radius*matrix.getMaxScaleOnAxis();return this},translate:function(offset){this.center.add(offset);return this},equals:function(sphere){return sphere.center.equals(this.center)&&sphere.radius===this.radius}};THREE.Frustum=function(p0,p1,p2,p3,p4,p5){this.planes=[p0!==undefined?p0:new THREE.Plane,p1!==undefined?p1:new THREE.Plane,p2!==undefined?p2:new THREE.Plane,p3!==undefined?p3:new THREE.Plane,p4!==undefined?p4:new THREE.Plane,p5!==undefined?p5:new THREE.Plane]};THREE.Frustum.prototype={constructor:THREE.Frustum,set:function(p0,p1,p2,p3,p4,p5){var planes=this.planes;planes[0].copy(p0);planes[1].copy(p1);planes[2].copy(p2);planes[3].copy(p3);planes[4].copy(p4);planes[5].copy(p5);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(frustum){var planes=this.planes;for(var i=0;i<6;i++){planes[i].copy(frustum.planes[i])}return this},setFromMatrix:function(m){var planes=this.planes;var me=m.elements;var me0=me[0],me1=me[1],me2=me[2],me3=me[3];var me4=me[4],me5=me[5],me6=me[6],me7=me[7];var me8=me[8],me9=me[9],me10=me[10],me11=me[11];var me12=me[12],me13=me[13],me14=me[14],me15=me[15];planes[0].setComponents(me3-me0,me7-me4,me11-me8,me15-me12).normalize();planes[1].setComponents(me3+me0,me7+me4,me11+me8,me15+me12).normalize();planes[2].setComponents(me3+me1,me7+me5,me11+me9,me15+me13).normalize();planes[3].setComponents(me3-me1,me7-me5,me11-me9,me15-me13).normalize();planes[4].setComponents(me3-me2,me7-me6,me11-me10,me15-me14).normalize();planes[5].setComponents(me3+me2,me7+me6,me11+me10,me15+me14).normalize();return this},intersectsObject:function(){var sphere=new THREE.Sphere;return function(object){var geometry=object.geometry;if(geometry.boundingSphere===null)geometry.computeBoundingSphere();sphere.copy(geometry.boundingSphere);sphere.applyMatrix4(object.matrixWorld);return this.intersectsSphere(sphere)}}(),intersectsSphere:function(sphere){var planes=this.planes;var center=sphere.center;var negRadius=-sphere.radius;for(var i=0;i<6;i++){var distance=planes[i].distanceToPoint(center);if(distance<negRadius){return false}}return true},intersectsBox:function(){var p1=new THREE.Vector3,p2=new THREE.Vector3;return function(box){var planes=this.planes;for(var i=0;i<6;i++){var plane=planes[i];p1.x=plane.normal.x>0?box.min.x:box.max.x;p2.x=plane.normal.x>0?box.max.x:box.min.x;p1.y=plane.normal.y>0?box.min.y:box.max.y;p2.y=plane.normal.y>0?box.max.y:box.min.y;p1.z=plane.normal.z>0?box.min.z:box.max.z;p2.z=plane.normal.z>0?box.max.z:box.min.z;var d1=plane.distanceToPoint(p1);var d2=plane.distanceToPoint(p2);if(d1<0&&d2<0){return false}}return true}}(),containsPoint:function(point){var planes=this.planes;for(var i=0;i<6;i++){if(planes[i].distanceToPoint(point)<0){return false}}return true}};THREE.Plane=function(normal,constant){this.normal=normal!==undefined?normal:new THREE.Vector3(1,0,0);this.constant=constant!==undefined?constant:0};THREE.Plane.prototype={constructor:THREE.Plane,set:function(normal,constant){this.normal.copy(normal);this.constant=constant;return this},setComponents:function(x,y,z,w){this.normal.set(x,y,z);this.constant=w;return this},setFromNormalAndCoplanarPoint:function(normal,point){this.normal.copy(normal);this.constant=-point.dot(this.normal);return this},setFromCoplanarPoints:function(){var v1=new THREE.Vector3;var v2=new THREE.Vector3;return function(a,b,c){var normal=v1.subVectors(c,b).cross(v2.subVectors(a,b)).normalize();this.setFromNormalAndCoplanarPoint(normal,a);return this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(plane){this.normal.copy(plane.normal);this.constant=plane.constant;return this},normalize:function(){var inverseNormalLength=1/this.normal.length();this.normal.multiplyScalar(inverseNormalLength);this.constant*=inverseNormalLength;return this},negate:function(){this.constant*=-1;this.normal.negate();return this},distanceToPoint:function(point){return this.normal.dot(point)+this.constant},distanceToSphere:function(sphere){return this.distanceToPoint(sphere.center)-sphere.radius},projectPoint:function(point,optionalTarget){return this.orthoPoint(point,optionalTarget).sub(point).negate()},orthoPoint:function(point,optionalTarget){var perpendicularMagnitude=this.distanceToPoint(point);var result=optionalTarget||new THREE.Vector3;return result.copy(this.normal).multiplyScalar(perpendicularMagnitude)},isIntersectionLine:function(line){var startSign=this.distanceToPoint(line.start);var endSign=this.distanceToPoint(line.end);return startSign<0&&endSign>0||endSign<0&&startSign>0},intersectLine:function(){var v1=new THREE.Vector3;return function(line,optionalTarget){var result=optionalTarget||new THREE.Vector3;var direction=line.delta(v1);var denominator=this.normal.dot(direction);if(denominator===0){if(this.distanceToPoint(line.start)===0){return result.copy(line.start)}return undefined}var t=-(line.start.dot(this.normal)+this.constant)/denominator;if(t<0||t>1){return undefined}return result.copy(direction).multiplyScalar(t).add(line.start)}}(),coplanarPoint:function(optionalTarget){var result=optionalTarget||new THREE.Vector3;return result.copy(this.normal).multiplyScalar(-this.constant)},applyMatrix4:function(){var v1=new THREE.Vector3;var v2=new THREE.Vector3;var m1=new THREE.Matrix3;return function(matrix,optionalNormalMatrix){var normalMatrix=optionalNormalMatrix||m1.getNormalMatrix(matrix);var newNormal=v1.copy(this.normal).applyMatrix3(normalMatrix);var newCoplanarPoint=this.coplanarPoint(v2);newCoplanarPoint.applyMatrix4(matrix);this.setFromNormalAndCoplanarPoint(newNormal,newCoplanarPoint);return this}}(),translate:function(offset){this.constant=this.constant-offset.dot(this.normal);return this},equals:function(plane){return plane.normal.equals(this.normal)&&plane.constant===this.constant}};THREE.Math={generateUUID:function(){var chars="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split("");var uuid=new Array(36);var rnd=0,r;return function(){for(var i=0;i<36;i++){if(i===8||i===13||i===18||i===23){uuid[i]="-"}else if(i===14){uuid[i]="4"}else{if(rnd<=2)rnd=33554432+Math.random()*16777216|0;r=rnd&15;rnd=rnd>>4;uuid[i]=chars[i===19?r&3|8:r]}}return uuid.join("")}}(),clamp:function(value,min,max){return Math.max(min,Math.min(max,value))},euclideanModulo:function(n,m){return(n%m+m)%m},mapLinear:function(x,a1,a2,b1,b2){return b1+(x-a1)*(b2-b1)/(a2-a1)},smoothstep:function(x,min,max){if(x<=min)return 0;if(x>=max)return 1;x=(x-min)/(max-min);return x*x*(3-2*x)},smootherstep:function(x,min,max){if(x<=min)return 0;if(x>=max)return 1;x=(x-min)/(max-min);return x*x*x*(x*(x*6-15)+10)},random16:function(){return(65280*Math.random()+255*Math.random())/65535},randInt:function(low,high){return low+Math.floor(Math.random()*(high-low+1))},randFloat:function(low,high){return low+Math.random()*(high-low)},randFloatSpread:function(range){return range*(.5-Math.random())},degToRad:function(){var degreeToRadiansFactor=Math.PI/180;return function(degrees){return degrees*degreeToRadiansFactor}}(),radToDeg:function(){var radianToDegreesFactor=180/Math.PI;return function(radians){return radians*radianToDegreesFactor}}(),isPowerOfTwo:function(value){return(value&value-1)===0&&value!==0},nearestPowerOfTwo:function(value){return Math.pow(2,Math.round(Math.log(value)/Math.LN2))},nextPowerOfTwo:function(value){value--;value|=value>>1;value|=value>>2;value|=value>>4;value|=value>>8;value|=value>>16;value++;return value}};THREE.Spline=function(points){this.points=points;var c=[],v3={x:0,y:0,z:0},point,intPoint,weight,w2,w3,pa,pb,pc,pd;this.initFromArray=function(a){this.points=[];for(var i=0;i<a.length;i++){this.points[i]={x:a[i][0],y:a[i][1],z:a[i][2]}}};this.getPoint=function(k){point=(this.points.length-1)*k;intPoint=Math.floor(point);weight=point-intPoint;c[0]=intPoint===0?intPoint:intPoint-1;c[1]=intPoint;c[2]=intPoint>this.points.length-2?this.points.length-1:intPoint+1;c[3]=intPoint>this.points.length-3?this.points.length-1:intPoint+2;pa=this.points[c[0]];pb=this.points[c[1]];pc=this.points[c[2]];pd=this.points[c[3]];w2=weight*weight;w3=weight*w2;v3.x=interpolate(pa.x,pb.x,pc.x,pd.x,weight,w2,w3);v3.y=interpolate(pa.y,pb.y,pc.y,pd.y,weight,w2,w3);v3.z=interpolate(pa.z,pb.z,pc.z,pd.z,weight,w2,w3);return v3};this.getControlPointsArray=function(){var i,p,l=this.points.length,coords=[];for(i=0;i<l;i++){p=this.points[i];coords[i]=[p.x,p.y,p.z]}return coords};this.getLength=function(nSubDivisions){var i,index,nSamples,position,point=0,intPoint=0,oldIntPoint=0,oldPosition=new THREE.Vector3,tmpVec=new THREE.Vector3,chunkLengths=[],totalLength=0;chunkLengths[0]=0;if(!nSubDivisions)nSubDivisions=100;nSamples=this.points.length*nSubDivisions;oldPosition.copy(this.points[0]);for(i=1;i<nSamples;i++){index=i/nSamples;position=this.getPoint(index);tmpVec.copy(position);totalLength+=tmpVec.distanceTo(oldPosition);oldPosition.copy(position);point=(this.points.length-1)*index;intPoint=Math.floor(point);if(intPoint!==oldIntPoint){chunkLengths[intPoint]=totalLength;oldIntPoint=intPoint}}chunkLengths[chunkLengths.length]=totalLength;return{chunks:chunkLengths,total:totalLength}};this.reparametrizeByArcLength=function(samplingCoef){var i,j,index,indexCurrent,indexNext,realDistance,sampling,position,newpoints=[],tmpVec=new THREE.Vector3,sl=this.getLength();newpoints.push(tmpVec.copy(this.points[0]).clone());for(i=1;i<this.points.length;i++){realDistance=sl.chunks[i]-sl.chunks[i-1];sampling=Math.ceil(samplingCoef*realDistance/sl.total);indexCurrent=(i-1)/(this.points.length-1);indexNext=i/(this.points.length-1);for(j=1;j<sampling-1;j++){index=indexCurrent+j*(1/sampling)*(indexNext-indexCurrent);position=this.getPoint(index);newpoints.push(tmpVec.copy(position).clone())}newpoints.push(tmpVec.copy(this.points[i]).clone())}this.points=newpoints};function interpolate(p0,p1,p2,p3,t,t2,t3){var v0=(p2-p0)*.5,v1=(p3-p1)*.5;return(2*(p1-p2)+v0+v1)*t3+(-3*(p1-p2)-2*v0-v1)*t2+v0*t+p1}};THREE.Triangle=function(a,b,c){this.a=a!==undefined?a:new THREE.Vector3;this.b=b!==undefined?b:new THREE.Vector3;this.c=c!==undefined?c:new THREE.Vector3};THREE.Triangle.normal=function(){var v0=new THREE.Vector3;return function(a,b,c,optionalTarget){var result=optionalTarget||new THREE.Vector3;result.subVectors(c,b);v0.subVectors(a,b);result.cross(v0);var resultLengthSq=result.lengthSq();if(resultLengthSq>0){return result.multiplyScalar(1/Math.sqrt(resultLengthSq))}return result.set(0,0,0)}}();THREE.Triangle.barycoordFromPoint=function(){var v0=new THREE.Vector3;var v1=new THREE.Vector3;var v2=new THREE.Vector3;return function(point,a,b,c,optionalTarget){v0.subVectors(c,a);v1.subVectors(b,a);v2.subVectors(point,a);var dot00=v0.dot(v0);var dot01=v0.dot(v1);var dot02=v0.dot(v2);var dot11=v1.dot(v1);var dot12=v1.dot(v2);var denom=dot00*dot11-dot01*dot01;var result=optionalTarget||new THREE.Vector3;if(denom===0){return result.set(-2,-1,-1)}var invDenom=1/denom;var u=(dot11*dot02-dot01*dot12)*invDenom;var v=(dot00*dot12-dot01*dot02)*invDenom;return result.set(1-u-v,v,u)}}();THREE.Triangle.containsPoint=function(){var v1=new THREE.Vector3;return function(point,a,b,c){var result=THREE.Triangle.barycoordFromPoint(point,a,b,c,v1);return result.x>=0&&result.y>=0&&result.x+result.y<=1}}();THREE.Triangle.prototype={constructor:THREE.Triangle,set:function(a,b,c){this.a.copy(a);this.b.copy(b);this.c.copy(c);return this},setFromPointsAndIndices:function(points,i0,i1,i2){this.a.copy(points[i0]);this.b.copy(points[i1]);this.c.copy(points[i2]);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(triangle){this.a.copy(triangle.a);this.b.copy(triangle.b);this.c.copy(triangle.c);return this},area:function(){var v0=new THREE.Vector3;var v1=new THREE.Vector3;return function(){v0.subVectors(this.c,this.b);v1.subVectors(this.a,this.b);return v0.cross(v1).length()*.5}}(),midpoint:function(optionalTarget){var result=optionalTarget||new THREE.Vector3;return result.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},normal:function(optionalTarget){return THREE.Triangle.normal(this.a,this.b,this.c,optionalTarget)},plane:function(optionalTarget){var result=optionalTarget||new THREE.Plane;return result.setFromCoplanarPoints(this.a,this.b,this.c)},barycoordFromPoint:function(point,optionalTarget){return THREE.Triangle.barycoordFromPoint(point,this.a,this.b,this.c,optionalTarget)},containsPoint:function(point){return THREE.Triangle.containsPoint(point,this.a,this.b,this.c)},equals:function(triangle){return triangle.a.equals(this.a)&&triangle.b.equals(this.b)&&triangle.c.equals(this.c)}};THREE.Channels=function(){this.mask=1};THREE.Channels.prototype={constructor:THREE.Channels,set:function(channel){this.mask=1<<channel},enable:function(channel){this.mask|=1<<channel},toggle:function(channel){this.mask^=1<<channel},disable:function(channel){this.mask&=~(1<<channel)}};THREE.Clock=function(autoStart){this.autoStart=autoStart!==undefined?autoStart:true;this.startTime=0;this.oldTime=0;this.elapsedTime=0;this.running=false};THREE.Clock.prototype={constructor:THREE.Clock,start:function(){this.startTime=self.performance.now();this.oldTime=this.startTime;this.running=true},stop:function(){this.getElapsedTime();this.running=false},getElapsedTime:function(){this.getDelta();return this.elapsedTime},getDelta:function(){var diff=0;if(this.autoStart&&!this.running){this.start()}if(this.running){var newTime=self.performance.now();diff=.001*(newTime-this.oldTime);this.oldTime=newTime;this.elapsedTime+=diff}return diff}};THREE.EventDispatcher=function(){};

        THREE.EventDispatcher.prototype={constructor:THREE.EventDispatcher,apply:function(object){object.addEventListener=THREE.EventDispatcher.prototype.addEventListener;object.hasEventListener=THREE.EventDispatcher.prototype.hasEventListener;object.removeEventListener=THREE.EventDispatcher.prototype.removeEventListener;object.dispatchEvent=THREE.EventDispatcher.prototype.dispatchEvent},addEventListener:function(type,listener){if(this._listeners===undefined)this._listeners={};var listeners=this._listeners;if(listeners[type]===undefined){listeners[type]=[]}if(listeners[type].indexOf(listener)===-1){listeners[type].push(listener)}},hasEventListener:function(type,listener){if(this._listeners===undefined)return false;var listeners=this._listeners;if(listeners[type]!==undefined&&listeners[type].indexOf(listener)!==-1){return true}return false},removeEventListener:function(type,listener){if(this._listeners===undefined)return;var listeners=this._listeners;var listenerArray=listeners[type];if(listenerArray!==undefined){var index=listenerArray.indexOf(listener);if(index!==-1){listenerArray.splice(index,1)}}},dispatchEvent:function(event){if(this._listeners===undefined)return;var listeners=this._listeners;var listenerArray=listeners[event.type];if(listenerArray!==undefined){event.target=this;var array=[];var length=listenerArray.length;for(var i=0;i<length;i++){array[i]=listenerArray[i]}for(var i=0;i<length;i++){array[i].call(this,event)}}}};(function(THREE){THREE.Raycaster=function(origin,direction,near,far){this.ray=new THREE.Ray(origin,direction);this.near=near||0;this.far=far||Infinity;this.params={Mesh:{},Line:{},LOD:{},Points:{threshold:1},Sprite:{}};Object.defineProperties(this.params,{PointCloud:{get:function(){console.warn("THREE.Raycaster: params.PointCloud has been renamed to params.Points.");return this.Points}}})};function descSort(a,b){return a.distance-b.distance}function intersectObject(object,raycaster,intersects,recursive){if(object.visible===false)return;object.raycast(raycaster,intersects);if(recursive===true){var children=object.children;for(var i=0,l=children.length;i<l;i++){intersectObject(children[i],raycaster,intersects,true)}}}THREE.Raycaster.prototype={constructor:THREE.Raycaster,linePrecision:1,set:function(origin,direction){this.ray.set(origin,direction)},setFromCamera:function(coords,camera){if(camera instanceof THREE.PerspectiveCamera){this.ray.origin.setFromMatrixPosition(camera.matrixWorld);this.ray.direction.set(coords.x,coords.y,.5).unproject(camera).sub(this.ray.origin).normalize()}else if(camera instanceof THREE.OrthographicCamera){this.ray.origin.set(coords.x,coords.y,-1).unproject(camera);this.ray.direction.set(0,0,-1).transformDirection(camera.matrixWorld)}else{console.error("THREE.Raycaster: Unsupported camera type.")}},intersectObject:function(object,recursive){var intersects=[];intersectObject(object,this,intersects,recursive);intersects.sort(descSort);return intersects},intersectObjects:function(objects,recursive){var intersects=[];if(Array.isArray(objects)===false){console.warn("THREE.Raycaster.intersectObjects: objects is not an Array.");return intersects}for(var i=0,l=objects.length;i<l;i++){intersectObject(objects[i],this,intersects,recursive)}intersects.sort(descSort);return intersects}}})(THREE);THREE.Object3D=function(){Object.defineProperty(this,"id",{value:THREE.Object3DIdCount++});this.uuid=THREE.Math.generateUUID();this.name="";this.type="Object3D";this.parent=null;this.channels=new THREE.Channels;this.children=[];this.up=THREE.Object3D.DefaultUp.clone();var position=new THREE.Vector3;var rotation=new THREE.Euler;var quaternion=new THREE.Quaternion;var scale=new THREE.Vector3(1,1,1);function onRotationChange(){quaternion.setFromEuler(rotation,false)}function onQuaternionChange(){rotation.setFromQuaternion(quaternion,undefined,false)}rotation.onChange(onRotationChange);quaternion.onChange(onQuaternionChange);Object.defineProperties(this,{position:{enumerable:true,value:position},rotation:{enumerable:true,value:rotation},quaternion:{enumerable:true,value:quaternion},scale:{enumerable:true,value:scale},modelViewMatrix:{value:new THREE.Matrix4},normalMatrix:{value:new THREE.Matrix3}});this.rotationAutoUpdate=true;this.matrix=new THREE.Matrix4;this.matrixWorld=new THREE.Matrix4;this.matrixAutoUpdate=THREE.Object3D.DefaultMatrixAutoUpdate;this.matrixWorldNeedsUpdate=false;this.visible=true;this.castShadow=false;this.receiveShadow=false;this.frustumCulled=true;this.renderOrder=0;this.userData={}};THREE.Object3D.DefaultUp=new THREE.Vector3(0,1,0);THREE.Object3D.DefaultMatrixAutoUpdate=true;THREE.Object3D.prototype={constructor:THREE.Object3D,get eulerOrder(){console.warn("THREE.Object3D: .eulerOrder is now .rotation.order.");return this.rotation.order},set eulerOrder(value){console.warn("THREE.Object3D: .eulerOrder is now .rotation.order.");this.rotation.order=value},get useQuaternion(){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")},set useQuaternion(value){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")},set renderDepth(value){console.warn("THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.")},applyMatrix:function(matrix){this.matrix.multiplyMatrices(matrix,this.matrix);this.matrix.decompose(this.position,this.quaternion,this.scale)},setRotationFromAxisAngle:function(axis,angle){this.quaternion.setFromAxisAngle(axis,angle)},setRotationFromEuler:function(euler){this.quaternion.setFromEuler(euler,true)},setRotationFromMatrix:function(m){this.quaternion.setFromRotationMatrix(m)},setRotationFromQuaternion:function(q){this.quaternion.copy(q)},rotateOnAxis:function(){var q1=new THREE.Quaternion;return function(axis,angle){q1.setFromAxisAngle(axis,angle);this.quaternion.multiply(q1);return this}}(),rotateX:function(){var v1=new THREE.Vector3(1,0,0);return function(angle){return this.rotateOnAxis(v1,angle)}}(),rotateY:function(){var v1=new THREE.Vector3(0,1,0);return function(angle){return this.rotateOnAxis(v1,angle)}}(),rotateZ:function(){var v1=new THREE.Vector3(0,0,1);return function(angle){return this.rotateOnAxis(v1,angle)}}(),translateOnAxis:function(){var v1=new THREE.Vector3;return function(axis,distance){v1.copy(axis).applyQuaternion(this.quaternion);this.position.add(v1.multiplyScalar(distance));return this}}(),translate:function(distance,axis){console.warn("THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.");return this.translateOnAxis(axis,distance)},translateX:function(){var v1=new THREE.Vector3(1,0,0);return function(distance){return this.translateOnAxis(v1,distance)}}(),translateY:function(){var v1=new THREE.Vector3(0,1,0);return function(distance){return this.translateOnAxis(v1,distance)}}(),translateZ:function(){var v1=new THREE.Vector3(0,0,1);return function(distance){return this.translateOnAxis(v1,distance)}}(),localToWorld:function(vector){return vector.applyMatrix4(this.matrixWorld)},worldToLocal:function(){var m1=new THREE.Matrix4;return function(vector){return vector.applyMatrix4(m1.getInverse(this.matrixWorld))}}(),lookAt:function(){var m1=new THREE.Matrix4;return function(vector){m1.lookAt(vector,this.position,this.up);this.quaternion.setFromRotationMatrix(m1)}}(),add:function(object){if(arguments.length>1){for(var i=0;i<arguments.length;i++){this.add(arguments[i])}return this}if(object===this){console.error("THREE.Object3D.add: object can't be added as a child of itself.",object);return this}if(object instanceof THREE.Object3D){if(object.parent!==null){object.parent.remove(object)}object.parent=this;object.dispatchEvent({type:"added"});this.children.push(object)}else{console.error("THREE.Object3D.add: object not an instance of THREE.Object3D.",object)}return this},remove:function(object){if(arguments.length>1){for(var i=0;i<arguments.length;i++){this.remove(arguments[i])}}var index=this.children.indexOf(object);if(index!==-1){object.parent=null;object.dispatchEvent({type:"removed"});this.children.splice(index,1)}},getChildByName:function(name){console.warn("THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().");return this.getObjectByName(name)},getObjectById:function(id){return this.getObjectByProperty("id",id)},getObjectByName:function(name){return this.getObjectByProperty("name",name)},getObjectByProperty:function(name,value){if(this[name]===value)return this;for(var i=0,l=this.children.length;i<l;i++){var child=this.children[i];var object=child.getObjectByProperty(name,value);if(object!==undefined){return object}}return undefined},getWorldPosition:function(optionalTarget){var result=optionalTarget||new THREE.Vector3;this.updateMatrixWorld(true);return result.setFromMatrixPosition(this.matrixWorld)},getWorldQuaternion:function(){var position=new THREE.Vector3;var scale=new THREE.Vector3;return function(optionalTarget){var result=optionalTarget||new THREE.Quaternion;this.updateMatrixWorld(true);this.matrixWorld.decompose(position,result,scale);return result}}(),getWorldRotation:function(){var quaternion=new THREE.Quaternion;return function(optionalTarget){var result=optionalTarget||new THREE.Euler;this.getWorldQuaternion(quaternion);return result.setFromQuaternion(quaternion,this.rotation.order,false)}}(),getWorldScale:function(){var position=new THREE.Vector3;var quaternion=new THREE.Quaternion;return function(optionalTarget){var result=optionalTarget||new THREE.Vector3;this.updateMatrixWorld(true);this.matrixWorld.decompose(position,quaternion,result);return result}}(),getWorldDirection:function(){var quaternion=new THREE.Quaternion;return function(optionalTarget){var result=optionalTarget||new THREE.Vector3;this.getWorldQuaternion(quaternion);return result.set(0,0,1).applyQuaternion(quaternion)}}(),raycast:function(){},traverse:function(callback){callback(this);var children=this.children;for(var i=0,l=children.length;i<l;i++){children[i].traverse(callback)}},traverseVisible:function(callback){if(this.visible===false)return;callback(this);var children=this.children;for(var i=0,l=children.length;i<l;i++){children[i].traverseVisible(callback)}},traverseAncestors:function(callback){var parent=this.parent;if(parent!==null){callback(parent);parent.traverseAncestors(callback)}},updateMatrix:function(){this.matrix.compose(this.position,this.quaternion,this.scale);this.matrixWorldNeedsUpdate=true},updateMatrixWorld:function(force){if(this.matrixAutoUpdate===true)this.updateMatrix();if(this.matrixWorldNeedsUpdate===true||force===true){if(this.parent===null){this.matrixWorld.copy(this.matrix)}else{this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix)}this.matrixWorldNeedsUpdate=false;force=true}for(var i=0,l=this.children.length;i<l;i++){this.children[i].updateMatrixWorld(force)}},toJSON:function(meta){var isRootObject=meta===undefined;var output={};if(isRootObject){meta={geometries:{},materials:{},textures:{},images:{}};output.metadata={version:4.4,type:"Object",generator:"Object3D.toJSON"}}var object={};object.uuid=this.uuid;object.type=this.type;if(this.name!=="")object.name=this.name;if(JSON.stringify(this.userData)!=="{}")object.userData=this.userData;if(this.castShadow===true)object.castShadow=true;if(this.receiveShadow===true)object.receiveShadow=true;if(this.visible===false)object.visible=false;object.matrix=this.matrix.toArray();if(this.geometry!==undefined){if(meta.geometries[this.geometry.uuid]===undefined){meta.geometries[this.geometry.uuid]=this.geometry.toJSON(meta)}object.geometry=this.geometry.uuid}if(this.material!==undefined){if(meta.materials[this.material.uuid]===undefined){meta.materials[this.material.uuid]=this.material.toJSON(meta)}object.material=this.material.uuid}if(this.children.length>0){object.children=[];for(var i=0;i<this.children.length;i++){object.children.push(this.children[i].toJSON(meta).object)}}if(isRootObject){var geometries=extractFromCache(meta.geometries);var materials=extractFromCache(meta.materials);var textures=extractFromCache(meta.textures);var images=extractFromCache(meta.images);if(geometries.length>0)output.geometries=geometries;if(materials.length>0)output.materials=materials;if(textures.length>0)output.textures=textures;if(images.length>0)output.images=images}output.object=object;return output;function extractFromCache(cache){var values=[];for(var key in cache){var data=cache[key];delete data.metadata;values.push(data)}return values}},clone:function(recursive){return(new this.constructor).copy(this,recursive)},copy:function(source,recursive){if(recursive===undefined)recursive=true;this.name=source.name;this.up.copy(source.up);this.position.copy(source.position);this.quaternion.copy(source.quaternion);this.scale.copy(source.scale);this.rotationAutoUpdate=source.rotationAutoUpdate;this.matrix.copy(source.matrix);this.matrixWorld.copy(source.matrixWorld);this.matrixAutoUpdate=source.matrixAutoUpdate;this.matrixWorldNeedsUpdate=source.matrixWorldNeedsUpdate;this.visible=source.visible;this.castShadow=source.castShadow;this.receiveShadow=source.receiveShadow;this.frustumCulled=source.frustumCulled;this.renderOrder=source.renderOrder;this.userData=JSON.parse(JSON.stringify(source.userData));if(recursive===true){for(var i=0;i<source.children.length;i++){var child=source.children[i];this.add(child.clone())}}return this}};THREE.EventDispatcher.prototype.apply(THREE.Object3D.prototype);THREE.Object3DIdCount=0;THREE.Face3=function(a,b,c,normal,color,materialIndex){this.a=a;this.b=b;this.c=c;this.normal=normal instanceof THREE.Vector3?normal:new THREE.Vector3;this.vertexNormals=Array.isArray(normal)?normal:[];this.color=color instanceof THREE.Color?color:new THREE.Color;this.vertexColors=Array.isArray(color)?color:[];this.materialIndex=materialIndex!==undefined?materialIndex:0};THREE.Face3.prototype={constructor:THREE.Face3,clone:function(){return(new this.constructor).copy(this)},copy:function(source){this.a=source.a;this.b=source.b;this.c=source.c;this.normal.copy(source.normal);this.color.copy(source.color);this.materialIndex=source.materialIndex;for(var i=0,il=source.vertexNormals.length;i<il;i++){this.vertexNormals[i]=source.vertexNormals[i].clone()}for(var i=0,il=source.vertexColors.length;i<il;i++){this.vertexColors[i]=source.vertexColors[i].clone()}return this}};THREE.Face4=function(a,b,c,d,normal,color,materialIndex){console.warn("THREE.Face4 has been removed. A THREE.Face3 will be created instead.");return new THREE.Face3(a,b,c,normal,color,materialIndex)};THREE.BufferAttribute=function(array,itemSize){this.uuid=THREE.Math.generateUUID();this.array=array;this.itemSize=itemSize;this.dynamic=false;this.updateRange={offset:0,count:-1};this.version=0};THREE.BufferAttribute.prototype={constructor:THREE.BufferAttribute,get length(){console.warn("THREE.BufferAttribute: .length has been deprecated. Please use .count.");return this.array.length},get count(){return this.array.length/this.itemSize},set needsUpdate(value){if(value===true)this.version++},setDynamic:function(value){this.dynamic=value;return this},copy:function(source){this.array=new source.array.constructor(source.array);this.itemSize=source.itemSize;this.dynamic=source.dynamic;return this},copyAt:function(index1,attribute,index2){index1*=this.itemSize;index2*=attribute.itemSize;for(var i=0,l=this.itemSize;i<l;i++){this.array[index1+i]=attribute.array[index2+i]}return this},copyArray:function(array){this.array.set(array);return this},copyColorsArray:function(colors){var array=this.array,offset=0;for(var i=0,l=colors.length;i<l;i++){var color=colors[i];if(color===undefined){console.warn("THREE.BufferAttribute.copyColorsArray(): color is undefined",i);color=new THREE.Color}array[offset++]=color.r;array[offset++]=color.g;array[offset++]=color.b}return this},copyIndicesArray:function(indices){var array=this.array,offset=0;for(var i=0,l=indices.length;i<l;i++){var index=indices[i];array[offset++]=index.a;array[offset++]=index.b;array[offset++]=index.c}return this},copyVector2sArray:function(vectors){var array=this.array,offset=0;for(var i=0,l=vectors.length;i<l;i++){var vector=vectors[i];if(vector===undefined){console.warn("THREE.BufferAttribute.copyVector2sArray(): vector is undefined",i);vector=new THREE.Vector2}array[offset++]=vector.x;array[offset++]=vector.y}return this},copyVector3sArray:function(vectors){var array=this.array,offset=0;for(var i=0,l=vectors.length;i<l;i++){var vector=vectors[i];if(vector===undefined){console.warn("THREE.BufferAttribute.copyVector3sArray(): vector is undefined",i);vector=new THREE.Vector3}array[offset++]=vector.x;array[offset++]=vector.y;array[offset++]=vector.z}return this},copyVector4sArray:function(vectors){var array=this.array,offset=0;for(var i=0,l=vectors.length;i<l;i++){var vector=vectors[i];if(vector===undefined){console.warn("THREE.BufferAttribute.copyVector4sArray(): vector is undefined",i);vector=new THREE.Vector4}array[offset++]=vector.x;array[offset++]=vector.y;array[offset++]=vector.z;array[offset++]=vector.w}return this},set:function(value,offset){if(offset===undefined)offset=0;this.array.set(value,offset);return this},getX:function(index){return this.array[index*this.itemSize]},setX:function(index,x){this.array[index*this.itemSize]=x;return this},getY:function(index){return this.array[index*this.itemSize+1]},setY:function(index,y){this.array[index*this.itemSize+1]=y;return this},getZ:function(index){return this.array[index*this.itemSize+2]},setZ:function(index,z){this.array[index*this.itemSize+2]=z;return this},getW:function(index){return this.array[index*this.itemSize+3]},setW:function(index,w){this.array[index*this.itemSize+3]=w;return this},setXY:function(index,x,y){index*=this.itemSize;this.array[index+0]=x;this.array[index+1]=y;return this},setXYZ:function(index,x,y,z){index*=this.itemSize;this.array[index+0]=x;this.array[index+1]=y;this.array[index+2]=z;return this},setXYZW:function(index,x,y,z,w){index*=this.itemSize;this.array[index+0]=x;this.array[index+1]=y;this.array[index+2]=z;this.array[index+3]=w;return this},clone:function(){return(new this.constructor).copy(this)}};THREE.Int8Attribute=function(array,itemSize){return new THREE.BufferAttribute(new Int8Array(array),itemSize)};THREE.Uint8Attribute=function(array,itemSize){return new THREE.BufferAttribute(new Uint8Array(array),itemSize)};THREE.Uint8ClampedAttribute=function(array,itemSize){return new THREE.BufferAttribute(new Uint8ClampedArray(array),itemSize)};THREE.Int16Attribute=function(array,itemSize){return new THREE.BufferAttribute(new Int16Array(array),itemSize)};THREE.Uint16Attribute=function(array,itemSize){return new THREE.BufferAttribute(new Uint16Array(array),itemSize)};THREE.Int32Attribute=function(array,itemSize){return new THREE.BufferAttribute(new Int32Array(array),itemSize)};THREE.Uint32Attribute=function(array,itemSize){return new THREE.BufferAttribute(new Uint32Array(array),itemSize)};THREE.Float32Attribute=function(array,itemSize){return new THREE.BufferAttribute(new Float32Array(array),itemSize)};THREE.Float64Attribute=function(array,itemSize){return new THREE.BufferAttribute(new Float64Array(array),itemSize)};THREE.DynamicBufferAttribute=function(array,itemSize){console.warn("THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setDynamic( true ) instead.");return new THREE.BufferAttribute(array,itemSize).setDynamic(true)};THREE.InstancedBufferAttribute=function(array,itemSize,meshPerAttribute){THREE.BufferAttribute.call(this,array,itemSize);this.meshPerAttribute=meshPerAttribute||1};THREE.InstancedBufferAttribute.prototype=Object.create(THREE.BufferAttribute.prototype);THREE.InstancedBufferAttribute.prototype.constructor=THREE.InstancedBufferAttribute;THREE.InstancedBufferAttribute.prototype.copy=function(source){THREE.BufferAttribute.prototype.copy.call(this,source);this.meshPerAttribute=source.meshPerAttribute;return this};THREE.InterleavedBuffer=function(array,stride){this.uuid=THREE.Math.generateUUID();this.array=array;this.stride=stride;this.dynamic=false;this.updateRange={offset:0,count:-1};this.version=0};THREE.InterleavedBuffer.prototype={constructor:THREE.InterleavedBuffer,get length(){return this.array.length},get count(){return this.array.length/this.stride},set needsUpdate(value){if(value===true)this.version++},setDynamic:function(value){this.dynamic=value;return this},copy:function(source){this.array=new source.array.constructor(source.array);this.stride=source.stride;this.dynamic=source.dynamic},copyAt:function(index1,attribute,index2){index1*=this.stride;index2*=attribute.stride;for(var i=0,l=this.stride;i<l;i++){this.array[index1+i]=attribute.array[index2+i]}return this},set:function(value,offset){if(offset===undefined)offset=0;this.array.set(value,offset);return this},clone:function(){return(new this.constructor).copy(this)}};THREE.InstancedInterleavedBuffer=function(array,stride,meshPerAttribute){THREE.InterleavedBuffer.call(this,array,stride);this.meshPerAttribute=meshPerAttribute||1};THREE.InstancedInterleavedBuffer.prototype=Object.create(THREE.InterleavedBuffer.prototype);THREE.InstancedInterleavedBuffer.prototype.constructor=THREE.InstancedInterleavedBuffer;THREE.InstancedInterleavedBuffer.prototype.copy=function(source){THREE.InterleavedBuffer.prototype.copy.call(this,source);this.meshPerAttribute=source.meshPerAttribute;return this};THREE.InterleavedBufferAttribute=function(interleavedBuffer,itemSize,offset){this.uuid=THREE.Math.generateUUID();this.data=interleavedBuffer;this.itemSize=itemSize;this.offset=offset};THREE.InterleavedBufferAttribute.prototype={constructor:THREE.InterleavedBufferAttribute,get length(){console.warn("THREE.BufferAttribute: .length has been deprecated. Please use .count.");return this.array.length},get count(){return this.data.array.length/this.data.stride},setX:function(index,x){this.data.array[index*this.data.stride+this.offset]=x;return this},setY:function(index,y){this.data.array[index*this.data.stride+this.offset+1]=y;return this},setZ:function(index,z){this.data.array[index*this.data.stride+this.offset+2]=z;return this},setW:function(index,w){this.data.array[index*this.data.stride+this.offset+3]=w;return this},getX:function(index){return this.data.array[index*this.data.stride+this.offset]},getY:function(index){return this.data.array[index*this.data.stride+this.offset+1]},getZ:function(index){return this.data.array[index*this.data.stride+this.offset+2]},getW:function(index){return this.data.array[index*this.data.stride+this.offset+3]},setXY:function(index,x,y){index=index*this.data.stride+this.offset;this.data.array[index+0]=x;this.data.array[index+1]=y;return this},setXYZ:function(index,x,y,z){index=index*this.data.stride+this.offset;this.data.array[index+0]=x;this.data.array[index+1]=y;this.data.array[index+2]=z;return this},setXYZW:function(index,x,y,z,w){index=index*this.data.stride+this.offset;this.data.array[index+0]=x;this.data.array[index+1]=y;this.data.array[index+2]=z;this.data.array[index+3]=w;return this}};THREE.Geometry=function(){Object.defineProperty(this,"id",{value:THREE.GeometryIdCount++});this.uuid=THREE.Math.generateUUID();this.name="";this.type="Geometry";this.vertices=[];this.colors=[];this.faces=[];this.faceVertexUvs=[[]];this.morphTargets=[];this.morphNormals=[];this.skinWeights=[];this.skinIndices=[];this.lineDistances=[];this.boundingBox=null;this.boundingSphere=null;this.verticesNeedUpdate=false;this.elementsNeedUpdate=false;this.uvsNeedUpdate=false;this.normalsNeedUpdate=false;this.colorsNeedUpdate=false;this.lineDistancesNeedUpdate=false;this.groupsNeedUpdate=false};THREE.Geometry.prototype={constructor:THREE.Geometry,applyMatrix:function(matrix){var normalMatrix=(new THREE.Matrix3).getNormalMatrix(matrix);for(var i=0,il=this.vertices.length;i<il;i++){var vertex=this.vertices[i];vertex.applyMatrix4(matrix)}for(var i=0,il=this.faces.length;i<il;i++){var face=this.faces[i];face.normal.applyMatrix3(normalMatrix).normalize();for(var j=0,jl=face.vertexNormals.length;j<jl;j++){face.vertexNormals[j].applyMatrix3(normalMatrix).normalize()}}if(this.boundingBox!==null){this.computeBoundingBox()}if(this.boundingSphere!==null){this.computeBoundingSphere()}this.verticesNeedUpdate=true;this.normalsNeedUpdate=true},rotateX:function(){var m1;return function rotateX(angle){if(m1===undefined)m1=new THREE.Matrix4;m1.makeRotationX(angle);this.applyMatrix(m1);return this}}(),rotateY:function(){var m1;return function rotateY(angle){if(m1===undefined)m1=new THREE.Matrix4;m1.makeRotationY(angle);this.applyMatrix(m1);return this}}(),rotateZ:function(){var m1;return function rotateZ(angle){if(m1===undefined)m1=new THREE.Matrix4;m1.makeRotationZ(angle);this.applyMatrix(m1);return this}}(),translate:function(){var m1;return function translate(x,y,z){if(m1===undefined)m1=new THREE.Matrix4;m1.makeTranslation(x,y,z);this.applyMatrix(m1);return this}}(),scale:function(){var m1;return function scale(x,y,z){if(m1===undefined)m1=new THREE.Matrix4;m1.makeScale(x,y,z);this.applyMatrix(m1);return this}}(),lookAt:function(){var obj;return function lookAt(vector){if(obj===undefined)obj=new THREE.Object3D;obj.lookAt(vector);obj.updateMatrix();this.applyMatrix(obj.matrix)}}(),fromBufferGeometry:function(geometry){var scope=this;var indices=geometry.index!==null?geometry.index.array:undefined;var attributes=geometry.attributes;var vertices=attributes.position.array;var normals=attributes.normal!==undefined?attributes.normal.array:undefined;var colors=attributes.color!==undefined?attributes.color.array:undefined;var uvs=attributes.uv!==undefined?attributes.uv.array:undefined;var uvs2=attributes.uv2!==undefined?attributes.uv2.array:undefined;if(uvs2!==undefined)this.faceVertexUvs[1]=[];var tempNormals=[];var tempUVs=[];var tempUVs2=[];for(var i=0,j=0,k=0;i<vertices.length;i+=3,j+=2,k+=4){scope.vertices.push(new THREE.Vector3(vertices[i],vertices[i+1],vertices[i+2]));if(normals!==undefined){tempNormals.push(new THREE.Vector3(normals[i],normals[i+1],normals[i+2]))}if(colors!==undefined){scope.colors.push(new THREE.Color(colors[i],colors[i+1],colors[i+2]))}if(uvs!==undefined){tempUVs.push(new THREE.Vector2(uvs[j],uvs[j+1]))}if(uvs2!==undefined){tempUVs2.push(new THREE.Vector2(uvs2[j],uvs2[j+1]))}}function addFace(a,b,c){var vertexNormals=normals!==undefined?[tempNormals[a].clone(),tempNormals[b].clone(),tempNormals[c].clone()]:[];var vertexColors=colors!==undefined?[scope.colors[a].clone(),scope.colors[b].clone(),scope.colors[c].clone()]:[];var face=new THREE.Face3(a,b,c,vertexNormals,vertexColors);scope.faces.push(face);if(uvs!==undefined){scope.faceVertexUvs[0].push([tempUVs[a].clone(),tempUVs[b].clone(),tempUVs[c].clone()])}if(uvs2!==undefined){scope.faceVertexUvs[1].push([tempUVs2[a].clone(),tempUVs2[b].clone(),tempUVs2[c].clone()])}}if(indices!==undefined){var groups=geometry.groups;if(groups.length>0){for(var i=0;i<groups.length;i++){var group=groups[i];var start=group.start;var count=group.count;for(var j=start,jl=start+count;j<jl;j+=3){addFace(indices[j],indices[j+1],indices[j+2])}}}else{for(var i=0;i<indices.length;i+=3){addFace(indices[i],indices[i+1],indices[i+2])}}}else{for(var i=0;i<vertices.length/3;i+=3){addFace(i,i+1,i+2)}}this.computeFaceNormals();if(geometry.boundingBox!==null){this.boundingBox=geometry.boundingBox.clone()}if(geometry.boundingSphere!==null){this.boundingSphere=geometry.boundingSphere.clone()}return this},center:function(){this.computeBoundingBox();var offset=this.boundingBox.center().negate();this.translate(offset.x,offset.y,offset.z);return offset},normalize:function(){this.computeBoundingSphere();var center=this.boundingSphere.center;var radius=this.boundingSphere.radius;var s=radius===0?1:1/radius;var matrix=new THREE.Matrix4;matrix.set(s,0,0,-s*center.x,0,s,0,-s*center.y,0,0,s,-s*center.z,0,0,0,1);this.applyMatrix(matrix);return this},computeFaceNormals:function(){var cb=new THREE.Vector3,ab=new THREE.Vector3;for(var f=0,fl=this.faces.length;f<fl;f++){var face=this.faces[f];var vA=this.vertices[face.a];var vB=this.vertices[face.b];var vC=this.vertices[face.c];cb.subVectors(vC,vB);ab.subVectors(vA,vB);cb.cross(ab);cb.normalize();face.normal.copy(cb)}},computeVertexNormals:function(areaWeighted){var v,vl,f,fl,face,vertices;vertices=new Array(this.vertices.length);for(v=0,vl=this.vertices.length;v<vl;v++){vertices[v]=new THREE.Vector3}if(areaWeighted){var vA,vB,vC;var cb=new THREE.Vector3,ab=new THREE.Vector3;for(f=0,fl=this.faces.length;f<fl;f++){face=this.faces[f];vA=this.vertices[face.a];vB=this.vertices[face.b];vC=this.vertices[face.c];cb.subVectors(vC,vB);ab.subVectors(vA,vB);cb.cross(ab);vertices[face.a].add(cb);vertices[face.b].add(cb);vertices[face.c].add(cb)}}else{for(f=0,fl=this.faces.length;f<fl;f++){face=this.faces[f];vertices[face.a].add(face.normal);vertices[face.b].add(face.normal);vertices[face.c].add(face.normal)}}for(v=0,vl=this.vertices.length;v<vl;v++){vertices[v].normalize()}for(f=0,fl=this.faces.length;f<fl;f++){face=this.faces[f];var vertexNormals=face.vertexNormals;if(vertexNormals.length===3){vertexNormals[0].copy(vertices[face.a]);vertexNormals[1].copy(vertices[face.b]);vertexNormals[2].copy(vertices[face.c])}else{vertexNormals[0]=vertices[face.a].clone();vertexNormals[1]=vertices[face.b].clone();vertexNormals[2]=vertices[face.c].clone()}}},computeMorphNormals:function(){var i,il,f,fl,face;for(f=0,fl=this.faces.length;f<fl;f++){face=this.faces[f];if(!face.__originalFaceNormal){face.__originalFaceNormal=face.normal.clone()}else{face.__originalFaceNormal.copy(face.normal)}if(!face.__originalVertexNormals)face.__originalVertexNormals=[];for(i=0,il=face.vertexNormals.length;i<il;i++){if(!face.__originalVertexNormals[i]){face.__originalVertexNormals[i]=face.vertexNormals[i].clone()}else{face.__originalVertexNormals[i].copy(face.vertexNormals[i])}}}var tmpGeo=new THREE.Geometry;tmpGeo.faces=this.faces;for(i=0,il=this.morphTargets.length;i<il;i++){if(!this.morphNormals[i]){this.morphNormals[i]={};this.morphNormals[i].faceNormals=[];this.morphNormals[i].vertexNormals=[];var dstNormalsFace=this.morphNormals[i].faceNormals;var dstNormalsVertex=this.morphNormals[i].vertexNormals;var faceNormal,vertexNormals;for(f=0,fl=this.faces.length;f<fl;f++){faceNormal=new THREE.Vector3;vertexNormals={a:new THREE.Vector3,b:new THREE.Vector3,c:new THREE.Vector3};dstNormalsFace.push(faceNormal);dstNormalsVertex.push(vertexNormals)}}var morphNormals=this.morphNormals[i];tmpGeo.vertices=this.morphTargets[i].vertices;tmpGeo.computeFaceNormals();tmpGeo.computeVertexNormals();var faceNormal,vertexNormals;for(f=0,fl=this.faces.length;f<fl;f++){face=this.faces[f];faceNormal=morphNormals.faceNormals[f];vertexNormals=morphNormals.vertexNormals[f];faceNormal.copy(face.normal);vertexNormals.a.copy(face.vertexNormals[0]);vertexNormals.b.copy(face.vertexNormals[1]);vertexNormals.c.copy(face.vertexNormals[2])}}for(f=0,fl=this.faces.length;f<fl;f++){face=this.faces[f];face.normal=face.__originalFaceNormal;face.vertexNormals=face.__originalVertexNormals}},computeTangents:function(){console.warn("THREE.Geometry: .computeTangents() has been removed.")},computeLineDistances:function(){var d=0;var vertices=this.vertices;for(var i=0,il=vertices.length;i<il;i++){if(i>0){d+=vertices[i].distanceTo(vertices[i-1])}this.lineDistances[i]=d}},computeBoundingBox:function(){if(this.boundingBox===null){this.boundingBox=new THREE.Box3}this.boundingBox.setFromPoints(this.vertices)},computeBoundingSphere:function(){if(this.boundingSphere===null){this.boundingSphere=new THREE.Sphere}this.boundingSphere.setFromPoints(this.vertices)},merge:function(geometry,matrix,materialIndexOffset){if(geometry instanceof THREE.Geometry===false){console.error("THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.",geometry);return}var normalMatrix,vertexOffset=this.vertices.length,vertices1=this.vertices,vertices2=geometry.vertices,faces1=this.faces,faces2=geometry.faces,uvs1=this.faceVertexUvs[0],uvs2=geometry.faceVertexUvs[0];

            if(materialIndexOffset===undefined)materialIndexOffset=0;if(matrix!==undefined){normalMatrix=(new THREE.Matrix3).getNormalMatrix(matrix)}for(var i=0,il=vertices2.length;i<il;i++){var vertex=vertices2[i];var vertexCopy=vertex.clone();if(matrix!==undefined)vertexCopy.applyMatrix4(matrix);vertices1.push(vertexCopy)}for(i=0,il=faces2.length;i<il;i++){var face=faces2[i],faceCopy,normal,color,faceVertexNormals=face.vertexNormals,faceVertexColors=face.vertexColors;faceCopy=new THREE.Face3(face.a+vertexOffset,face.b+vertexOffset,face.c+vertexOffset);faceCopy.normal.copy(face.normal);if(normalMatrix!==undefined){faceCopy.normal.applyMatrix3(normalMatrix).normalize()}for(var j=0,jl=faceVertexNormals.length;j<jl;j++){normal=faceVertexNormals[j].clone();if(normalMatrix!==undefined){normal.applyMatrix3(normalMatrix).normalize()}faceCopy.vertexNormals.push(normal)}faceCopy.color.copy(face.color);for(var j=0,jl=faceVertexColors.length;j<jl;j++){color=faceVertexColors[j];faceCopy.vertexColors.push(color.clone())}faceCopy.materialIndex=face.materialIndex+materialIndexOffset;faces1.push(faceCopy)}for(i=0,il=uvs2.length;i<il;i++){var uv=uvs2[i],uvCopy=[];if(uv===undefined){continue}for(var j=0,jl=uv.length;j<jl;j++){uvCopy.push(uv[j].clone())}uvs1.push(uvCopy)}},mergeMesh:function(mesh){if(mesh instanceof THREE.Mesh===false){console.error("THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.",mesh);return}mesh.matrixAutoUpdate&&mesh.updateMatrix();this.merge(mesh.geometry,mesh.matrix)},mergeVertices:function(){var verticesMap={};var unique=[],changes=[];var v,key;var precisionPoints=4;var precision=Math.pow(10,precisionPoints);var i,il,face;var indices,j,jl;for(i=0,il=this.vertices.length;i<il;i++){v=this.vertices[i];key=Math.round(v.x*precision)+"_"+Math.round(v.y*precision)+"_"+Math.round(v.z*precision);if(verticesMap[key]===undefined){verticesMap[key]=i;unique.push(this.vertices[i]);changes[i]=unique.length-1}else{changes[i]=changes[verticesMap[key]]}}var faceIndicesToRemove=[];for(i=0,il=this.faces.length;i<il;i++){face=this.faces[i];face.a=changes[face.a];face.b=changes[face.b];face.c=changes[face.c];indices=[face.a,face.b,face.c];var dupIndex=-1;for(var n=0;n<3;n++){if(indices[n]===indices[(n+1)%3]){dupIndex=n;faceIndicesToRemove.push(i);break}}}for(i=faceIndicesToRemove.length-1;i>=0;i--){var idx=faceIndicesToRemove[i];this.faces.splice(idx,1);for(j=0,jl=this.faceVertexUvs.length;j<jl;j++){this.faceVertexUvs[j].splice(idx,1)}}var diff=this.vertices.length-unique.length;this.vertices=unique;return diff},sortFacesByMaterialIndex:function(){var faces=this.faces;var length=faces.length;for(var i=0;i<length;i++){faces[i]._id=i}function materialIndexSort(a,b){return a.materialIndex-b.materialIndex}faces.sort(materialIndexSort);var uvs1=this.faceVertexUvs[0];var uvs2=this.faceVertexUvs[1];var newUvs1,newUvs2;if(uvs1&&uvs1.length===length)newUvs1=[];if(uvs2&&uvs2.length===length)newUvs2=[];for(var i=0;i<length;i++){var id=faces[i]._id;if(newUvs1)newUvs1.push(uvs1[id]);if(newUvs2)newUvs2.push(uvs2[id])}if(newUvs1)this.faceVertexUvs[0]=newUvs1;if(newUvs2)this.faceVertexUvs[1]=newUvs2},toJSON:function(){var data={metadata:{version:4.4,type:"Geometry",generator:"Geometry.toJSON"}};data.uuid=this.uuid;data.type=this.type;if(this.name!=="")data.name=this.name;if(this.parameters!==undefined){var parameters=this.parameters;for(var key in parameters){if(parameters[key]!==undefined)data[key]=parameters[key]}return data}var vertices=[];for(var i=0;i<this.vertices.length;i++){var vertex=this.vertices[i];vertices.push(vertex.x,vertex.y,vertex.z)}var faces=[];var normals=[];var normalsHash={};var colors=[];var colorsHash={};var uvs=[];var uvsHash={};for(var i=0;i<this.faces.length;i++){var face=this.faces[i];var hasMaterial=false;var hasFaceUv=false;var hasFaceVertexUv=this.faceVertexUvs[0][i]!==undefined;var hasFaceNormal=face.normal.length()>0;var hasFaceVertexNormal=face.vertexNormals.length>0;var hasFaceColor=face.color.r!==1||face.color.g!==1||face.color.b!==1;var hasFaceVertexColor=face.vertexColors.length>0;var faceType=0;faceType=setBit(faceType,0,0);faceType=setBit(faceType,1,hasMaterial);faceType=setBit(faceType,2,hasFaceUv);faceType=setBit(faceType,3,hasFaceVertexUv);faceType=setBit(faceType,4,hasFaceNormal);faceType=setBit(faceType,5,hasFaceVertexNormal);faceType=setBit(faceType,6,hasFaceColor);faceType=setBit(faceType,7,hasFaceVertexColor);faces.push(faceType);faces.push(face.a,face.b,face.c);if(hasFaceVertexUv){var faceVertexUvs=this.faceVertexUvs[0][i];faces.push(getUvIndex(faceVertexUvs[0]),getUvIndex(faceVertexUvs[1]),getUvIndex(faceVertexUvs[2]))}if(hasFaceNormal){faces.push(getNormalIndex(face.normal))}if(hasFaceVertexNormal){var vertexNormals=face.vertexNormals;faces.push(getNormalIndex(vertexNormals[0]),getNormalIndex(vertexNormals[1]),getNormalIndex(vertexNormals[2]))}if(hasFaceColor){faces.push(getColorIndex(face.color))}if(hasFaceVertexColor){var vertexColors=face.vertexColors;faces.push(getColorIndex(vertexColors[0]),getColorIndex(vertexColors[1]),getColorIndex(vertexColors[2]))}}function setBit(value,position,enabled){return enabled?value|1<<position:value&~(1<<position)}function getNormalIndex(normal){var hash=normal.x.toString()+normal.y.toString()+normal.z.toString();if(normalsHash[hash]!==undefined){return normalsHash[hash]}normalsHash[hash]=normals.length/3;normals.push(normal.x,normal.y,normal.z);return normalsHash[hash]}function getColorIndex(color){var hash=color.r.toString()+color.g.toString()+color.b.toString();if(colorsHash[hash]!==undefined){return colorsHash[hash]}colorsHash[hash]=colors.length;colors.push(color.getHex());return colorsHash[hash]}function getUvIndex(uv){var hash=uv.x.toString()+uv.y.toString();if(uvsHash[hash]!==undefined){return uvsHash[hash]}uvsHash[hash]=uvs.length/2;uvs.push(uv.x,uv.y);return uvsHash[hash]}data.data={};data.data.vertices=vertices;data.data.normals=normals;if(colors.length>0)data.data.colors=colors;if(uvs.length>0)data.data.uvs=[uvs];data.data.faces=faces;return data},clone:function(){return(new this.constructor).copy(this)},copy:function(source){this.vertices=[];this.faces=[];this.faceVertexUvs=[[]];var vertices=source.vertices;for(var i=0,il=vertices.length;i<il;i++){this.vertices.push(vertices[i].clone())}var faces=source.faces;for(var i=0,il=faces.length;i<il;i++){this.faces.push(faces[i].clone())}for(var i=0,il=source.faceVertexUvs.length;i<il;i++){var faceVertexUvs=source.faceVertexUvs[i];if(this.faceVertexUvs[i]===undefined){this.faceVertexUvs[i]=[]}for(var j=0,jl=faceVertexUvs.length;j<jl;j++){var uvs=faceVertexUvs[j],uvsCopy=[];for(var k=0,kl=uvs.length;k<kl;k++){var uv=uvs[k];uvsCopy.push(uv.clone())}this.faceVertexUvs[i].push(uvsCopy)}}return this},dispose:function(){this.dispatchEvent({type:"dispose"})}};THREE.EventDispatcher.prototype.apply(THREE.Geometry.prototype);THREE.GeometryIdCount=0;THREE.DirectGeometry=function(){Object.defineProperty(this,"id",{value:THREE.GeometryIdCount++});this.uuid=THREE.Math.generateUUID();this.name="";this.type="DirectGeometry";this.indices=[];this.vertices=[];this.normals=[];this.colors=[];this.uvs=[];this.uvs2=[];this.groups=[];this.morphTargets={};this.skinWeights=[];this.skinIndices=[];this.boundingBox=null;this.boundingSphere=null;this.verticesNeedUpdate=false;this.normalsNeedUpdate=false;this.colorsNeedUpdate=false;this.uvsNeedUpdate=false;this.groupsNeedUpdate=false};THREE.DirectGeometry.prototype={constructor:THREE.DirectGeometry,computeBoundingBox:THREE.Geometry.prototype.computeBoundingBox,computeBoundingSphere:THREE.Geometry.prototype.computeBoundingSphere,computeFaceNormals:function(){console.warn("THREE.DirectGeometry: computeFaceNormals() is not a method of this type of geometry.")},computeVertexNormals:function(){console.warn("THREE.DirectGeometry: computeVertexNormals() is not a method of this type of geometry.")},computeGroups:function(geometry){var group;var groups=[];var materialIndex;var faces=geometry.faces;for(var i=0;i<faces.length;i++){var face=faces[i];if(face.materialIndex!==materialIndex){materialIndex=face.materialIndex;if(group!==undefined){group.count=i*3-group.start;groups.push(group)}group={start:i*3,materialIndex:materialIndex}}}if(group!==undefined){group.count=i*3-group.start;groups.push(group)}this.groups=groups},fromGeometry:function(geometry){var faces=geometry.faces;var vertices=geometry.vertices;var faceVertexUvs=geometry.faceVertexUvs;var hasFaceVertexUv=faceVertexUvs[0]&&faceVertexUvs[0].length>0;var hasFaceVertexUv2=faceVertexUvs[1]&&faceVertexUvs[1].length>0;var morphTargets=geometry.morphTargets;var morphTargetsLength=morphTargets.length;if(morphTargetsLength>0){var morphTargetsPosition=[];for(var i=0;i<morphTargetsLength;i++){morphTargetsPosition[i]=[]}this.morphTargets.position=morphTargetsPosition}var morphNormals=geometry.morphNormals;var morphNormalsLength=morphNormals.length;if(morphNormalsLength>0){var morphTargetsNormal=[];for(var i=0;i<morphNormalsLength;i++){morphTargetsNormal[i]=[]}this.morphTargets.normal=morphTargetsNormal}var skinIndices=geometry.skinIndices;var skinWeights=geometry.skinWeights;var hasSkinIndices=skinIndices.length===vertices.length;var hasSkinWeights=skinWeights.length===vertices.length;for(var i=0;i<faces.length;i++){var face=faces[i];this.vertices.push(vertices[face.a],vertices[face.b],vertices[face.c]);var vertexNormals=face.vertexNormals;if(vertexNormals.length===3){this.normals.push(vertexNormals[0],vertexNormals[1],vertexNormals[2])}else{var normal=face.normal;this.normals.push(normal,normal,normal)}var vertexColors=face.vertexColors;if(vertexColors.length===3){this.colors.push(vertexColors[0],vertexColors[1],vertexColors[2])}else{var color=face.color;this.colors.push(color,color,color)}if(hasFaceVertexUv===true){var vertexUvs=faceVertexUvs[0][i];if(vertexUvs!==undefined){this.uvs.push(vertexUvs[0],vertexUvs[1],vertexUvs[2])}else{console.warn("THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ",i);this.uvs.push(new THREE.Vector2,new THREE.Vector2,new THREE.Vector2)}}if(hasFaceVertexUv2===true){var vertexUvs=faceVertexUvs[1][i];if(vertexUvs!==undefined){this.uvs2.push(vertexUvs[0],vertexUvs[1],vertexUvs[2])}else{console.warn("THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ",i);this.uvs2.push(new THREE.Vector2,new THREE.Vector2,new THREE.Vector2)}}for(var j=0;j<morphTargetsLength;j++){var morphTarget=morphTargets[j].vertices;morphTargetsPosition[j].push(morphTarget[face.a],morphTarget[face.b],morphTarget[face.c])}for(var j=0;j<morphNormalsLength;j++){var morphNormal=morphNormals[j].vertexNormals[i];morphTargetsNormal[j].push(morphNormal.a,morphNormal.b,morphNormal.c)}if(hasSkinIndices){this.skinIndices.push(skinIndices[face.a],skinIndices[face.b],skinIndices[face.c])}if(hasSkinWeights){this.skinWeights.push(skinWeights[face.a],skinWeights[face.b],skinWeights[face.c])}}this.computeGroups(geometry);this.verticesNeedUpdate=geometry.verticesNeedUpdate;this.normalsNeedUpdate=geometry.normalsNeedUpdate;this.colorsNeedUpdate=geometry.colorsNeedUpdate;this.uvsNeedUpdate=geometry.uvsNeedUpdate;this.groupsNeedUpdate=geometry.groupsNeedUpdate;return this},dispose:function(){this.dispatchEvent({type:"dispose"})}};THREE.EventDispatcher.prototype.apply(THREE.DirectGeometry.prototype);THREE.BufferGeometry=function(){Object.defineProperty(this,"id",{value:THREE.GeometryIdCount++});this.uuid=THREE.Math.generateUUID();this.name="";this.type="BufferGeometry";this.index=null;this.attributes={};this.morphAttributes={};this.groups=[];this.boundingBox=null;this.boundingSphere=null;this.drawRange={start:0,count:Infinity}};THREE.BufferGeometry.prototype={constructor:THREE.BufferGeometry,addIndex:function(index){console.warn("THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().");this.setIndex(index)},getIndex:function(){return this.index},setIndex:function(index){this.index=index},addAttribute:function(name,attribute){if(attribute instanceof THREE.BufferAttribute===false&&attribute instanceof THREE.InterleavedBufferAttribute===false){console.warn("THREE.BufferGeometry: .addAttribute() now expects ( name, attribute ).");this.addAttribute(name,new THREE.BufferAttribute(arguments[1],arguments[2]));return}if(name==="index"){console.warn("THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute.");this.setIndex(attribute);return}this.attributes[name]=attribute},getAttribute:function(name){return this.attributes[name]},removeAttribute:function(name){delete this.attributes[name]},get drawcalls(){console.error("THREE.BufferGeometry: .drawcalls has been renamed to .groups.");return this.groups},get offsets(){console.warn("THREE.BufferGeometry: .offsets has been renamed to .groups.");return this.groups},addDrawCall:function(start,count,indexOffset){if(indexOffset!==undefined){console.warn("THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.")}console.warn("THREE.BufferGeometry: .addDrawCall() is now .addGroup().");this.addGroup(start,count)},clearDrawCalls:function(){console.warn("THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups().");this.clearGroups()},addGroup:function(start,count,materialIndex){this.groups.push({start:start,count:count,materialIndex:materialIndex!==undefined?materialIndex:0})},clearGroups:function(){this.groups=[]},setDrawRange:function(start,count){this.drawRange.start=start;this.drawRange.count=count},applyMatrix:function(matrix){var position=this.attributes.position;if(position!==undefined){matrix.applyToVector3Array(position.array);position.needsUpdate=true}var normal=this.attributes.normal;if(normal!==undefined){var normalMatrix=(new THREE.Matrix3).getNormalMatrix(matrix);normalMatrix.applyToVector3Array(normal.array);normal.needsUpdate=true}if(this.boundingBox!==null){this.computeBoundingBox()}if(this.boundingSphere!==null){this.computeBoundingSphere()}},rotateX:function(){var m1;return function rotateX(angle){if(m1===undefined)m1=new THREE.Matrix4;m1.makeRotationX(angle);this.applyMatrix(m1);return this}}(),rotateY:function(){var m1;return function rotateY(angle){if(m1===undefined)m1=new THREE.Matrix4;m1.makeRotationY(angle);this.applyMatrix(m1);return this}}(),rotateZ:function(){var m1;return function rotateZ(angle){if(m1===undefined)m1=new THREE.Matrix4;m1.makeRotationZ(angle);this.applyMatrix(m1);return this}}(),translate:function(){var m1;return function translate(x,y,z){if(m1===undefined)m1=new THREE.Matrix4;m1.makeTranslation(x,y,z);this.applyMatrix(m1);return this}}(),scale:function(){var m1;return function scale(x,y,z){if(m1===undefined)m1=new THREE.Matrix4;m1.makeScale(x,y,z);this.applyMatrix(m1);return this}}(),lookAt:function(){var obj;return function lookAt(vector){if(obj===undefined)obj=new THREE.Object3D;obj.lookAt(vector);obj.updateMatrix();this.applyMatrix(obj.matrix)}}(),center:function(){this.computeBoundingBox();var offset=this.boundingBox.center().negate();this.translate(offset.x,offset.y,offset.z);return offset},setFromObject:function(object){var geometry=object.geometry;if(object instanceof THREE.Points||object instanceof THREE.Line){var positions=new THREE.Float32Attribute(geometry.vertices.length*3,3);var colors=new THREE.Float32Attribute(geometry.colors.length*3,3);this.addAttribute("position",positions.copyVector3sArray(geometry.vertices));this.addAttribute("color",colors.copyColorsArray(geometry.colors));if(geometry.lineDistances&&geometry.lineDistances.length===geometry.vertices.length){var lineDistances=new THREE.Float32Attribute(geometry.lineDistances.length,1);this.addAttribute("lineDistance",lineDistances.copyArray(geometry.lineDistances))}if(geometry.boundingSphere!==null){this.boundingSphere=geometry.boundingSphere.clone()}if(geometry.boundingBox!==null){this.boundingBox=geometry.boundingBox.clone()}}else if(object instanceof THREE.Mesh){if(geometry instanceof THREE.Geometry){this.fromGeometry(geometry)}}return this},updateFromObject:function(object){var geometry=object.geometry;if(object instanceof THREE.Mesh){var direct=geometry.__directGeometry;if(direct===undefined){return this.fromGeometry(geometry)}direct.verticesNeedUpdate=geometry.verticesNeedUpdate;direct.normalsNeedUpdate=geometry.normalsNeedUpdate;direct.colorsNeedUpdate=geometry.colorsNeedUpdate;direct.uvsNeedUpdate=geometry.uvsNeedUpdate;direct.groupsNeedUpdate=geometry.groupsNeedUpdate;geometry.verticesNeedUpdate=false;geometry.normalsNeedUpdate=false;geometry.colorsNeedUpdate=false;geometry.uvsNeedUpdate=false;geometry.groupsNeedUpdate=false;geometry=direct}if(geometry.verticesNeedUpdate===true){var attribute=this.attributes.position;if(attribute!==undefined){attribute.copyVector3sArray(geometry.vertices);attribute.needsUpdate=true}geometry.verticesNeedUpdate=false}if(geometry.normalsNeedUpdate===true){var attribute=this.attributes.normal;if(attribute!==undefined){attribute.copyVector3sArray(geometry.normals);attribute.needsUpdate=true}geometry.normalsNeedUpdate=false}if(geometry.colorsNeedUpdate===true){var attribute=this.attributes.color;if(attribute!==undefined){attribute.copyColorsArray(geometry.colors);attribute.needsUpdate=true}geometry.colorsNeedUpdate=false}if(geometry.uvsNeedUpdate){var attribute=this.attributes.uv;if(attribute!==undefined){attribute.copyVector2sArray(geometry.uvs);attribute.needsUpdate=true}geometry.uvsNeedUpdate=false}if(geometry.lineDistancesNeedUpdate){var attribute=this.attributes.lineDistance;if(attribute!==undefined){attribute.copyArray(geometry.lineDistances);attribute.needsUpdate=true}geometry.lineDistancesNeedUpdate=false}if(geometry.groupsNeedUpdate){geometry.computeGroups(object.geometry);this.groups=geometry.groups;geometry.groupsNeedUpdate=false}return this},fromGeometry:function(geometry){geometry.__directGeometry=(new THREE.DirectGeometry).fromGeometry(geometry);return this.fromDirectGeometry(geometry.__directGeometry)},fromDirectGeometry:function(geometry){var positions=new Float32Array(geometry.vertices.length*3);this.addAttribute("position",new THREE.BufferAttribute(positions,3).copyVector3sArray(geometry.vertices));if(geometry.normals.length>0){var normals=new Float32Array(geometry.normals.length*3);this.addAttribute("normal",new THREE.BufferAttribute(normals,3).copyVector3sArray(geometry.normals))}if(geometry.colors.length>0){var colors=new Float32Array(geometry.colors.length*3);this.addAttribute("color",new THREE.BufferAttribute(colors,3).copyColorsArray(geometry.colors))}if(geometry.uvs.length>0){var uvs=new Float32Array(geometry.uvs.length*2);this.addAttribute("uv",new THREE.BufferAttribute(uvs,2).copyVector2sArray(geometry.uvs))}if(geometry.uvs2.length>0){var uvs2=new Float32Array(geometry.uvs2.length*2);this.addAttribute("uv2",new THREE.BufferAttribute(uvs2,2).copyVector2sArray(geometry.uvs2))}if(geometry.indices.length>0){var TypeArray=geometry.vertices.length>65535?Uint32Array:Uint16Array;var indices=new TypeArray(geometry.indices.length*3);this.setIndex(new THREE.BufferAttribute(indices,1).copyIndicesArray(geometry.indices))}this.groups=geometry.groups;for(var name in geometry.morphTargets){var array=[];var morphTargets=geometry.morphTargets[name];for(var i=0,l=morphTargets.length;i<l;i++){var morphTarget=morphTargets[i];var attribute=new THREE.Float32Attribute(morphTarget.length*3,3);array.push(attribute.copyVector3sArray(morphTarget))}this.morphAttributes[name]=array}if(geometry.skinIndices.length>0){var skinIndices=new THREE.Float32Attribute(geometry.skinIndices.length*4,4);this.addAttribute("skinIndex",skinIndices.copyVector4sArray(geometry.skinIndices))}if(geometry.skinWeights.length>0){var skinWeights=new THREE.Float32Attribute(geometry.skinWeights.length*4,4);this.addAttribute("skinWeight",skinWeights.copyVector4sArray(geometry.skinWeights))}if(geometry.boundingSphere!==null){this.boundingSphere=geometry.boundingSphere.clone()}if(geometry.boundingBox!==null){this.boundingBox=geometry.boundingBox.clone()}return this},computeBoundingBox:function(){var vector=new THREE.Vector3;return function(){if(this.boundingBox===null){this.boundingBox=new THREE.Box3}var positions=this.attributes.position.array;if(positions){var bb=this.boundingBox;bb.makeEmpty();for(var i=0,il=positions.length;i<il;i+=3){vector.fromArray(positions,i);bb.expandByPoint(vector)}}if(positions===undefined||positions.length===0){this.boundingBox.min.set(0,0,0);this.boundingBox.max.set(0,0,0)}if(isNaN(this.boundingBox.min.x)||isNaN(this.boundingBox.min.y)||isNaN(this.boundingBox.min.z)){console.error('THREE.BufferGeometry.computeBoundingBox: Computed min/max have NaN values. The "position" attribute is likely to have NaN values.',this)}}}(),computeBoundingSphere:function(){var box=new THREE.Box3;var vector=new THREE.Vector3;return function(){if(this.boundingSphere===null){this.boundingSphere=new THREE.Sphere}var positions=this.attributes.position.array;if(positions){box.makeEmpty();var center=this.boundingSphere.center;for(var i=0,il=positions.length;i<il;i+=3){vector.fromArray(positions,i);box.expandByPoint(vector)}box.center(center);var maxRadiusSq=0;for(var i=0,il=positions.length;i<il;i+=3){vector.fromArray(positions,i);maxRadiusSq=Math.max(maxRadiusSq,center.distanceToSquared(vector))}this.boundingSphere.radius=Math.sqrt(maxRadiusSq);if(isNaN(this.boundingSphere.radius)){console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.',this)}}}}(),computeFaceNormals:function(){},computeVertexNormals:function(){var index=this.index;var attributes=this.attributes;var groups=this.groups;if(attributes.position){var positions=attributes.position.array;if(attributes.normal===undefined){this.addAttribute("normal",new THREE.BufferAttribute(new Float32Array(positions.length),3))}else{var normals=attributes.normal.array;for(var i=0,il=normals.length;i<il;i++){normals[i]=0}}var normals=attributes.normal.array;var vA,vB,vC,pA=new THREE.Vector3,pB=new THREE.Vector3,pC=new THREE.Vector3,cb=new THREE.Vector3,ab=new THREE.Vector3;if(index){var indices=index.array;if(groups.length===0){this.addGroup(0,indices.length)}for(var j=0,jl=groups.length;j<jl;++j){var group=groups[j];var start=group.start;var count=group.count;for(var i=start,il=start+count;i<il;i+=3){vA=indices[i+0]*3;vB=indices[i+1]*3;vC=indices[i+2]*3;pA.fromArray(positions,vA);pB.fromArray(positions,vB);pC.fromArray(positions,vC);cb.subVectors(pC,pB);ab.subVectors(pA,pB);cb.cross(ab);normals[vA]+=cb.x;normals[vA+1]+=cb.y;normals[vA+2]+=cb.z;normals[vB]+=cb.x;normals[vB+1]+=cb.y;normals[vB+2]+=cb.z;normals[vC]+=cb.x;normals[vC+1]+=cb.y;normals[vC+2]+=cb.z}}}else{for(var i=0,il=positions.length;i<il;i+=9){pA.fromArray(positions,i);pB.fromArray(positions,i+3);pC.fromArray(positions,i+6);cb.subVectors(pC,pB);ab.subVectors(pA,pB);cb.cross(ab);normals[i]=cb.x;normals[i+1]=cb.y;normals[i+2]=cb.z;normals[i+3]=cb.x;normals[i+4]=cb.y;normals[i+5]=cb.z;normals[i+6]=cb.x;normals[i+7]=cb.y;normals[i+8]=cb.z}}this.normalizeNormals();attributes.normal.needsUpdate=true}},computeTangents:function(){console.warn("THREE.BufferGeometry: .computeTangents() has been removed.")},computeOffsets:function(size){console.warn("THREE.BufferGeometry: .computeOffsets() has been removed.")},merge:function(geometry,offset){if(geometry instanceof THREE.BufferGeometry===false){console.error("THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.",geometry);return}if(offset===undefined)offset=0;var attributes=this.attributes;for(var key in attributes){if(geometry.attributes[key]===undefined)continue;var attribute1=attributes[key];var attributeArray1=attribute1.array;var attribute2=geometry.attributes[key];var attributeArray2=attribute2.array;var attributeSize=attribute2.itemSize;for(var i=0,j=attributeSize*offset;i<attributeArray2.length;i++,j++){attributeArray1[j]=attributeArray2[i]}}return this},normalizeNormals:function(){var normals=this.attributes.normal.array;var x,y,z,n;for(var i=0,il=normals.length;i<il;i+=3){x=normals[i];y=normals[i+1];z=normals[i+2];n=1/Math.sqrt(x*x+y*y+z*z);normals[i]*=n;normals[i+1]*=n;normals[i+2]*=n}},toJSON:function(){var data={metadata:{version:4.4,type:"BufferGeometry",generator:"BufferGeometry.toJSON"}};data.uuid=this.uuid;data.type=this.type;if(this.name!=="")data.name=this.name;if(this.parameters!==undefined){var parameters=this.parameters;for(var key in parameters){if(parameters[key]!==undefined)data[key]=parameters[key]}return data}data.data={attributes:{}};var index=this.index;if(index!==null){var array=Array.prototype.slice.call(index.array);data.data.index={type:index.array.constructor.name,array:array}}var attributes=this.attributes;for(var key in attributes){var attribute=attributes[key];var array=Array.prototype.slice.call(attribute.array);data.data.attributes[key]={itemSize:attribute.itemSize,type:attribute.array.constructor.name,array:array}}var groups=this.groups;if(groups.length>0){data.data.groups=JSON.parse(JSON.stringify(groups))}var boundingSphere=this.boundingSphere;if(boundingSphere!==null){data.data.boundingSphere={center:boundingSphere.center.toArray(),radius:boundingSphere.radius}}return data},clone:function(){return(new this.constructor).copy(this)},copy:function(source){var index=source.index;if(index!==null){this.setIndex(index.clone())}var attributes=source.attributes;for(var name in attributes){var attribute=attributes[name];this.addAttribute(name,attribute.clone())}var groups=source.groups;for(var i=0,l=groups.length;i<l;i++){var group=groups[i];this.addGroup(group.start,group.count)}return this},dispose:function(){this.dispatchEvent({type:"dispose"})}};THREE.EventDispatcher.prototype.apply(THREE.BufferGeometry.prototype);THREE.BufferGeometry.MaxIndex=65535;THREE.InstancedBufferGeometry=function(){THREE.BufferGeometry.call(this);this.type="InstancedBufferGeometry";this.maxInstancedCount=undefined};THREE.InstancedBufferGeometry.prototype=Object.create(THREE.BufferGeometry.prototype);THREE.InstancedBufferGeometry.prototype.constructor=THREE.InstancedBufferGeometry;THREE.InstancedBufferGeometry.prototype.addGroup=function(start,count,instances){this.groups.push({start:start,count:count,instances:instances})};THREE.InstancedBufferGeometry.prototype.copy=function(source){var index=source.index;if(index!==null){this.setIndex(index.clone())}var attributes=source.attributes;for(var name in attributes){var attribute=attributes[name];this.addAttribute(name,attribute.clone())}var groups=source.groups;for(var i=0,l=groups.length;i<l;i++){var group=groups[i];this.addGroup(group.start,group.count,group.instances)}return this};THREE.EventDispatcher.prototype.apply(THREE.InstancedBufferGeometry.prototype);THREE.AnimationAction=function(clip,startTime,timeScale,weight,loop){if(clip===undefined)throw new Error("clip is null");this.clip=clip;this.localRoot=null;this.startTime=startTime||0;this.timeScale=timeScale||1;this.weight=weight||1;this.loop=loop||THREE.LoopRepeat;this.loopCount=0;this.enabled=true;this.actionTime=-this.startTime;this.clipTime=0;this.propertyBindings=[]};THREE.AnimationAction.prototype={constructor:THREE.AnimationAction,setLocalRoot:function(localRoot){this.localRoot=localRoot;return this},updateTime:function(clipDeltaTime){var previousClipTime=this.clipTime;var previousLoopCount=this.loopCount;var previousActionTime=this.actionTime;var duration=this.clip.duration;this.actionTime=this.actionTime+clipDeltaTime;if(this.loop===THREE.LoopOnce){this.loopCount=0;this.clipTime=Math.min(Math.max(this.actionTime,0),duration);if(this.clipTime!==previousClipTime){if(this.clipTime===duration){this.mixer.dispatchEvent({type:"finished",action:this,direction:1})}else if(this.clipTime===0){this.mixer.dispatchEvent({type:"finished",action:this,direction:-1})}}return this.clipTime}this.loopCount=Math.floor(this.actionTime/duration);var newClipTime=this.actionTime-this.loopCount*duration;newClipTime=newClipTime%duration;if(this.loop==THREE.LoopPingPong){if(Math.abs(this.loopCount%2)===1){newClipTime=duration-newClipTime}}this.clipTime=newClipTime;if(this.loopCount!==previousLoopCount){this.mixer.dispatchEvent({type:"loop",action:this,loopDelta:this.loopCount-this.loopCount})}return this.clipTime},syncWith:function(action){this.actionTime=action.actionTime;this.timeScale=action.timeScale;return this},warpToDuration:function(duration){this.timeScale=this.clip.duration/duration;return this},init:function(time){this.clipTime=time-this.startTime;return this},update:function(clipDeltaTime){this.updateTime(clipDeltaTime);var clipResults=this.clip.getAt(this.clipTime);return clipResults},getTimeScaleAt:function(time){if(this.timeScale.getAt){return this.timeScale.getAt(time)}return this.timeScale},getWeightAt:function(time){if(this.weight.getAt){return this.weight.getAt(time)}return this.weight}};THREE.AnimationClip=function(name,duration,tracks){this.name=name;this.tracks=tracks;this.duration=duration!==undefined?duration:-1;if(this.duration<0){for(var i=0;i<this.tracks.length;i++){var track=this.tracks[i];this.duration=Math.max(track.keys[track.keys.length-1].time)}}this.trim();this.optimize();this.results=[]};THREE.AnimationClip.prototype={constructor:THREE.AnimationClip,getAt:function(clipTime){clipTime=Math.max(0,Math.min(clipTime,this.duration));for(var i=0;i<this.tracks.length;i++){var track=this.tracks[i];this.results[i]=track.getAt(clipTime)}return this.results},trim:function(){for(var i=0;i<this.tracks.length;i++){this.tracks[i].trim(0,this.duration)}return this},optimize:function(){for(var i=0;i<this.tracks.length;i++){this.tracks[i].optimize()}return this}};THREE.AnimationClip.CreateFromMorphTargetSequence=function(name,morphTargetSequence,fps){var numMorphTargets=morphTargetSequence.length;var tracks=[];for(var i=0;i<numMorphTargets;i++){var keys=[];keys.push({time:(i+numMorphTargets-1)%numMorphTargets,value:0});keys.push({time:i,value:1});keys.push({time:(i+1)%numMorphTargets,value:0});keys.sort(THREE.KeyframeTrack.keyComparer);if(keys[0].time===0){keys.push({time:numMorphTargets,value:keys[0].value})}tracks.push(new THREE.NumberKeyframeTrack(".morphTargetInfluences["+morphTargetSequence[i].name+"]",keys).scale(1/fps))}return new THREE.AnimationClip(name,-1,tracks)};THREE.AnimationClip.findByName=function(clipArray,name){for(var i=0;i<clipArray.length;i++){if(clipArray[i].name===name){return clipArray[i]}}return null};THREE.AnimationClip.CreateClipsFromMorphTargetSequences=function(morphTargets,fps){var animationToMorphTargets={};var pattern=/^([\w-]*?)([\d]+)$/;for(var i=0,il=morphTargets.length;i<il;i++){var morphTarget=morphTargets[i];var parts=morphTarget.name.match(pattern);if(parts&&parts.length>1){var name=parts[1];var animationMorphTargets=animationToMorphTargets[name];if(!animationMorphTargets){animationToMorphTargets[name]=animationMorphTargets=[]}animationMorphTargets.push(morphTarget)}}var clips=[];for(var name in animationToMorphTargets){clips.push(THREE.AnimationClip.CreateFromMorphTargetSequence(name,animationToMorphTargets[name],fps))}return clips};THREE.AnimationClip.parse=function(json){var tracks=[];for(var i=0;i<json.tracks.length;i++){tracks.push(THREE.KeyframeTrack.parse(json.tracks[i]).scale(1/json.fps))}return new THREE.AnimationClip(json.name,json.duration,tracks)};THREE.AnimationClip.parseAnimation=function(animation,bones,nodeName){if(!animation){console.error("  no animation in JSONLoader data");return null}var convertTrack=function(trackName,animationKeys,propertyName,trackType,animationKeyToValueFunc){var keys=[];for(var k=0;k<animationKeys.length;k++){var animationKey=animationKeys[k];if(animationKey[propertyName]!==undefined){keys.push({time:animationKey.time,value:animationKeyToValueFunc(animationKey)})}}if(keys.length>0){return new trackType(trackName,keys)}return null};var tracks=[];var clipName=animation.name||"default";var duration=animation.length||-1;var fps=animation.fps||30;var hierarchyTracks=animation.hierarchy||[];for(var h=0;h<hierarchyTracks.length;h++){var animationKeys=hierarchyTracks[h].keys;if(!animationKeys||animationKeys.length==0){
            continue}if(animationKeys[0].morphTargets){var morphTargetNames={};for(var k=0;k<animationKeys.length;k++){if(animationKeys[k].morphTargets){for(var m=0;m<animationKeys[k].morphTargets.length;m++){morphTargetNames[animationKeys[k].morphTargets[m]]=-1}}}for(var morphTargetName in morphTargetNames){var keys=[];for(var m=0;m<animationKeys[k].morphTargets.length;m++){var animationKey=animationKeys[k];keys.push({time:animationKey.time,value:animationKey.morphTarget===morphTargetName?1:0})}tracks.push(new THREE.NumberKeyframeTrack(nodeName+".morphTargetInfluence["+morphTargetName+"]",keys))}duration=morphTargetNames.length*(fps||1)}else{var boneName=nodeName+".bones["+bones[h].name+"]";var positionTrack=convertTrack(boneName+".position",animationKeys,"pos",THREE.VectorKeyframeTrack,function(animationKey){return(new THREE.Vector3).fromArray(animationKey.pos)});if(positionTrack)tracks.push(positionTrack);var quaternionTrack=convertTrack(boneName+".quaternion",animationKeys,"rot",THREE.QuaternionKeyframeTrack,function(animationKey){if(animationKey.rot.slerp){return animationKey.rot.clone()}else{return(new THREE.Quaternion).fromArray(animationKey.rot)}});if(quaternionTrack)tracks.push(quaternionTrack);var scaleTrack=convertTrack(boneName+".scale",animationKeys,"scl",THREE.VectorKeyframeTrack,function(animationKey){return(new THREE.Vector3).fromArray(animationKey.scl)});if(scaleTrack)tracks.push(scaleTrack)}}if(tracks.length===0){return null}var clip=new THREE.AnimationClip(clipName,duration,tracks);return clip};THREE.AnimationMixer=function(root){this.root=root;this.time=0;this.timeScale=1;this.actions=[];this.propertyBindingMap={}};THREE.AnimationMixer.prototype={constructor:THREE.AnimationMixer,addAction:function(action){this.actions.push(action);action.init(this.time);action.mixer=this;var tracks=action.clip.tracks;var root=action.localRoot||this.root;for(var i=0;i<tracks.length;i++){var track=tracks[i];var propertyBindingKey=root.uuid+"-"+track.name;var propertyBinding=this.propertyBindingMap[propertyBindingKey];if(propertyBinding===undefined){propertyBinding=new THREE.PropertyBinding(root,track.name);this.propertyBindingMap[propertyBindingKey]=propertyBinding}action.propertyBindings.push(propertyBinding);propertyBinding.referenceCount+=1}},removeAllActions:function(){for(var i=0;i<this.actions.length;i++){this.actions[i].mixer=null}for(var properyBindingKey in this.propertyBindingMap){this.propertyBindingMap[properyBindingKey].unbind()}this.actions=[];this.propertyBindingMap={};return this},removeAction:function(action){var index=this.actions.indexOf(action);if(index!==-1){this.actions.splice(index,1);action.mixer=null}var root=action.localRoot||this.root;var tracks=action.clip.tracks;for(var i=0;i<tracks.length;i++){var track=tracks[i];var propertyBindingKey=root.uuid+"-"+track.name;var propertyBinding=this.propertyBindingMap[propertyBindingKey];propertyBinding.referenceCount-=1;if(propertyBinding.referenceCount<=0){propertyBinding.unbind();delete this.propertyBindingMap[propertyBindingKey]}}return this},findActionByName:function(name){for(var i=0;i<this.actions.length;i++){if(this.actions[i].name===name)return this.actions[i]}return null},play:function(action,optionalFadeInDuration){action.startTime=this.time;this.addAction(action);return this},fadeOut:function(action,duration){var keys=[];keys.push({time:this.time,value:1});keys.push({time:this.time+duration,value:0});action.weight=new THREE.NumberKeyframeTrack("weight",keys);return this},fadeIn:function(action,duration){var keys=[];keys.push({time:this.time,value:0});keys.push({time:this.time+duration,value:1});action.weight=new THREE.NumberKeyframeTrack("weight",keys);return this},warp:function(action,startTimeScale,endTimeScale,duration){var keys=[];keys.push({time:this.time,value:startTimeScale});keys.push({time:this.time+duration,value:endTimeScale});action.timeScale=new THREE.NumberKeyframeTrack("timeScale",keys);return this},crossFade:function(fadeOutAction,fadeInAction,duration,warp){this.fadeOut(fadeOutAction,duration);this.fadeIn(fadeInAction,duration);if(warp){var startEndRatio=fadeOutAction.clip.duration/fadeInAction.clip.duration;var endStartRatio=1/startEndRatio;this.warp(fadeOutAction,1,startEndRatio,duration);this.warp(fadeInAction,endStartRatio,1,duration)}return this},update:function(deltaTime){var mixerDeltaTime=deltaTime*this.timeScale;this.time+=mixerDeltaTime;for(var i=0;i<this.actions.length;i++){var action=this.actions[i];var weight=action.getWeightAt(this.time);var actionTimeScale=action.getTimeScaleAt(this.time);var actionDeltaTime=mixerDeltaTime*actionTimeScale;var actionResults=action.update(actionDeltaTime);if(action.weight<=0||!action.enabled)continue;for(var j=0;j<actionResults.length;j++){var name=action.clip.tracks[j].name;action.propertyBindings[j].accumulate(actionResults[j],weight)}}for(var propertyBindingKey in this.propertyBindingMap){this.propertyBindingMap[propertyBindingKey].apply()}return this}};THREE.EventDispatcher.prototype.apply(THREE.AnimationMixer.prototype);THREE.AnimationUtils={getEqualsFunc:function(exemplarValue){if(exemplarValue.equals){return function equals_object(a,b){return a.equals(b)}}return function equals_primitive(a,b){return a===b}},clone:function(exemplarValue){var typeName=typeof exemplarValue;if(typeName==="object"){if(exemplarValue.clone){return exemplarValue.clone()}console.error("can not figure out how to copy exemplarValue",exemplarValue)}return exemplarValue},lerp:function(a,b,alpha,interTrack){var lerpFunc=THREE.AnimationUtils.getLerpFunc(a,interTrack);return lerpFunc(a,b,alpha)},lerp_object:function(a,b,alpha){return a.lerp(b,alpha)},slerp_object:function(a,b,alpha){return a.slerp(b,alpha)},lerp_number:function(a,b,alpha){return a*(1-alpha)+b*alpha},lerp_boolean:function(a,b,alpha){return alpha<.5?a:b},lerp_boolean_immediate:function(a,b,alpha){return a},lerp_string:function(a,b,alpha){return alpha<.5?a:b},lerp_string_immediate:function(a,b,alpha){return a},getLerpFunc:function(exemplarValue,interTrack){if(exemplarValue===undefined||exemplarValue===null)throw new Error("examplarValue is null");var typeName=typeof exemplarValue;switch(typeName){case"object":if(exemplarValue.lerp){return THREE.AnimationUtils.lerp_object}if(exemplarValue.slerp){return THREE.AnimationUtils.slerp_object}break;case"number":return THREE.AnimationUtils.lerp_number;case"boolean":if(interTrack){return THREE.AnimationUtils.lerp_boolean}else{return THREE.AnimationUtils.lerp_boolean_immediate}case"string":if(interTrack){return THREE.AnimationUtils.lerp_string}else{return THREE.AnimationUtils.lerp_string_immediate}}}};THREE.KeyframeTrack=function(name,keys){if(name===undefined)throw new Error("track name is undefined");if(keys===undefined||keys.length===0)throw new Error("no keys in track named "+name);this.name=name;this.keys=keys;this.lastIndex=0;this.validate();this.optimize()};THREE.KeyframeTrack.prototype={constructor:THREE.KeyframeTrack,getAt:function(time){while(this.lastIndex<this.keys.length&&time>=this.keys[this.lastIndex].time){this.lastIndex++}while(this.lastIndex>0&&time<this.keys[this.lastIndex-1].time){this.lastIndex--}if(this.lastIndex>=this.keys.length){this.setResult(this.keys[this.keys.length-1].value);return this.result}if(this.lastIndex===0){this.setResult(this.keys[0].value);return this.result}var prevKey=this.keys[this.lastIndex-1];this.setResult(prevKey.value);if(prevKey.constantToNext){return this.result}var currentKey=this.keys[this.lastIndex];var alpha=(time-prevKey.time)/(currentKey.time-prevKey.time);this.result=this.lerpValues(this.result,currentKey.value,alpha);return this.result},shift:function(timeOffset){if(timeOffset!==0){for(var i=0;i<this.keys.length;i++){this.keys[i].time+=timeOffset}}return this},scale:function(timeScale){if(timeScale!==1){for(var i=0;i<this.keys.length;i++){this.keys[i].time*=timeScale}}return this},trim:function(startTime,endTime){var firstKeysToRemove=0;for(var i=1;i<this.keys.length;i++){if(this.keys[i]<=startTime){firstKeysToRemove++}}var lastKeysToRemove=0;for(var i=this.keys.length-2;i>0;i++){if(this.keys[i]>=endTime){lastKeysToRemove++}else{break}}if(firstKeysToRemove+lastKeysToRemove>0){this.keys=this.keys.splice(firstKeysToRemove,this.keys.length-lastKeysToRemove-firstKeysToRemove)}return this},validate:function(){var prevKey=null;if(this.keys.length===0){console.error("  track is empty, no keys",this);return}for(var i=0;i<this.keys.length;i++){var currKey=this.keys[i];if(!currKey){console.error("  key is null in track",this,i);return}if(typeof currKey.time!=="number"||isNaN(currKey.time)){console.error("  key.time is not a valid number",this,i,currKey);return}if(currKey.value===undefined||currKey.value===null){console.error("  key.value is null in track",this,i,currKey);return}if(prevKey&&prevKey.time>currKey.time){console.error("  key.time is less than previous key time, out of order keys",this,i,currKey,prevKey);return}prevKey=currKey}return this},optimize:function(){var newKeys=[];var prevKey=this.keys[0];newKeys.push(prevKey);var equalsFunc=THREE.AnimationUtils.getEqualsFunc(prevKey.value);for(var i=1;i<this.keys.length-1;i++){var currKey=this.keys[i];var nextKey=this.keys[i+1];if(prevKey.time===currKey.time){continue}if(this.compareValues(prevKey.value,currKey.value)&&this.compareValues(currKey.value,nextKey.value)){continue}prevKey.constantToNext=this.compareValues(prevKey.value,currKey.value);newKeys.push(currKey);prevKey=currKey}newKeys.push(this.keys[this.keys.length-1]);this.keys=newKeys;return this}};THREE.KeyframeTrack.keyComparer=function keyComparator(key0,key1){return key0.time-key1.time};THREE.KeyframeTrack.parse=function(json){if(json.type===undefined)throw new Error("track type undefined, can not parse");var trackType=THREE.KeyframeTrack.GetTrackTypeForTypeName(json.type);return trackType.parse(json)};THREE.KeyframeTrack.GetTrackTypeForTypeName=function(typeName){switch(typeName.toLowerCase()){case"vector":case"vector2":case"vector3":case"vector4":return THREE.VectorKeyframeTrack;case"quaternion":return THREE.QuaternionKeyframeTrack;case"integer":case"scalar":case"double":case"float":case"number":return THREE.NumberKeyframeTrack;case"bool":case"boolean":return THREE.BooleanKeyframeTrack;case"string":return THREE.StringKeyframeTrack}throw new Error("Unsupported typeName: "+typeName)};THREE.PropertyBinding=function(rootNode,trackName){this.rootNode=rootNode;this.trackName=trackName;this.referenceCount=0;this.originalValue=null;var parseResults=THREE.PropertyBinding.parseTrackName(trackName);this.directoryName=parseResults.directoryName;this.nodeName=parseResults.nodeName;this.objectName=parseResults.objectName;this.objectIndex=parseResults.objectIndex;this.propertyName=parseResults.propertyName;this.propertyIndex=parseResults.propertyIndex;this.node=THREE.PropertyBinding.findNode(rootNode,this.nodeName)||rootNode;this.cumulativeValue=null;this.cumulativeWeight=0};THREE.PropertyBinding.prototype={constructor:THREE.PropertyBinding,reset:function(){this.cumulativeValue=null;this.cumulativeWeight=0},accumulate:function(value,weight){if(!this.isBound)this.bind();if(this.cumulativeWeight===0){if(weight>0){if(this.cumulativeValue===null){this.cumulativeValue=THREE.AnimationUtils.clone(value)}this.cumulativeWeight=weight}}else{var lerpAlpha=weight/(this.cumulativeWeight+weight);this.cumulativeValue=this.lerpValue(this.cumulativeValue,value,lerpAlpha);this.cumulativeWeight+=weight}},unbind:function(){if(!this.isBound)return;this.setValue(this.originalValue);this.setValue=null;this.getValue=null;this.lerpValue=null;this.equalsValue=null;this.triggerDirty=null;this.isBound=false},bind:function(){if(this.isBound)return;var targetObject=this.node;if(!targetObject){console.error("  trying to update node for track: "+this.trackName+" but it wasn't found.");return}if(this.objectName){if(this.objectName==="materials"){if(!targetObject.material){console.error("  can not bind to material as node does not have a material",this);return}if(!targetObject.material.materials){console.error("  can not bind to material.materials as node.material does not have a materials array",this);return}targetObject=targetObject.material.materials}else if(this.objectName==="bones"){if(!targetObject.skeleton){console.error("  can not bind to bones as node does not have a skeleton",this);return}targetObject=targetObject.skeleton.bones;for(var i=0;i<targetObject.length;i++){if(targetObject[i].name===this.objectIndex){this.objectIndex=i;break}}}else{if(targetObject[this.objectName]===undefined){console.error("  can not bind to objectName of node, undefined",this);return}targetObject=targetObject[this.objectName]}if(this.objectIndex!==undefined){if(targetObject[this.objectIndex]===undefined){console.error("  trying to bind to objectIndex of objectName, but is undefined:",this,targetObject);return}targetObject=targetObject[this.objectIndex]}}var nodeProperty=targetObject[this.propertyName];if(!nodeProperty){console.error("  trying to update property for track: "+this.nodeName+"."+this.propertyName+" but it wasn't found.",targetObject);return}if(this.propertyIndex!==undefined){if(this.propertyName==="morphTargetInfluences"){if(!targetObject.geometry){console.error("  can not bind to morphTargetInfluences becasuse node does not have a geometry",this)}if(!targetObject.geometry.morphTargets){console.error("  can not bind to morphTargetInfluences becasuse node does not have a geometry.morphTargets",this)}for(var i=0;i<this.node.geometry.morphTargets.length;i++){if(targetObject.geometry.morphTargets[i].name===this.propertyIndex){this.propertyIndex=i;break}}}this.setValue=function setValue_propertyIndexed(value){if(!this.equalsValue(nodeProperty[this.propertyIndex],value)){nodeProperty[this.propertyIndex]=value;return true}return false};this.getValue=function getValue_propertyIndexed(){return nodeProperty[this.propertyIndex]}}else if(nodeProperty.copy){this.setValue=function setValue_propertyObject(value){if(!this.equalsValue(nodeProperty,value)){nodeProperty.copy(value);return true}return false};this.getValue=function getValue_propertyObject(){return nodeProperty}}else{this.setValue=function setValue_property(value){if(!this.equalsValue(targetObject[this.propertyName],value)){targetObject[this.propertyName]=value;return true}return false};this.getValue=function getValue_property(){return targetObject[this.propertyName]}}if(targetObject.needsUpdate!==undefined){this.triggerDirty=function triggerDirty_needsUpdate(){this.node.needsUpdate=true}}else if(targetObject.matrixWorldNeedsUpdate!==undefined){this.triggerDirty=function triggerDirty_matrixWorldNeedsUpdate(){targetObject.matrixWorldNeedsUpdate=true}}this.originalValue=this.getValue();this.equalsValue=THREE.AnimationUtils.getEqualsFunc(this.originalValue);this.lerpValue=THREE.AnimationUtils.getLerpFunc(this.originalValue,true);this.isBound=true},apply:function(){if(!this.isBound)this.bind();if(this.cumulativeWeight>0){if(this.cumulativeWeight<1){var remainingWeight=1-this.cumulativeWeight;var lerpAlpha=remainingWeight/(this.cumulativeWeight+remainingWeight);this.cumulativeValue=this.lerpValue(this.cumulativeValue,this.originalValue,lerpAlpha)}var valueChanged=this.setValue(this.cumulativeValue);if(valueChanged&&this.triggerDirty){this.triggerDirty()}this.cumulativeValue=null;this.cumulativeWeight=0}}};THREE.PropertyBinding.parseTrackName=function(trackName){var re=/^(([\w]+\/)*)([\w-\d]+)?(\.([\w]+)(\[([\w\d\[\]\_. ]+)\])?)?(\.([\w.]+)(\[([\w\d\[\]\_. ]+)\])?)$/;var matches=re.exec(trackName);if(!matches){throw new Error("cannot parse trackName at all: "+trackName)}if(matches.index===re.lastIndex){re.lastIndex++}var results={directoryName:matches[1],nodeName:matches[3],objectName:matches[5],objectIndex:matches[7],propertyName:matches[9],propertyIndex:matches[11]};if(results.propertyName===null||results.propertyName.length===0){throw new Error("can not parse propertyName from trackName: "+trackName)}return results};THREE.PropertyBinding.findNode=function(root,nodeName){function searchSkeleton(skeleton){for(var i=0;i<skeleton.bones.length;i++){var bone=skeleton.bones[i];if(bone.name===nodeName){return bone}}return null}function searchNodeSubtree(children){for(var i=0;i<children.length;i++){var childNode=children[i];if(childNode.name===nodeName||childNode.uuid===nodeName){return childNode}var result=searchNodeSubtree(childNode.children);if(result)return result}return null}if(!nodeName||nodeName===""||nodeName==="root"||nodeName==="."||nodeName===-1||nodeName===root.name||nodeName===root.uuid){return root}if(root.skeleton){var bone=searchSkeleton(root.skeleton);if(bone){return bone}}if(root.children){var subTreeNode=searchNodeSubtree(root.children);if(subTreeNode){return subTreeNode}}return null};THREE.VectorKeyframeTrack=function(name,keys){THREE.KeyframeTrack.call(this,name,keys);this.result=this.keys[0].value.clone()};THREE.VectorKeyframeTrack.prototype=Object.create(THREE.KeyframeTrack.prototype);THREE.VectorKeyframeTrack.prototype.constructor=THREE.VectorKeyframeTrack;THREE.VectorKeyframeTrack.prototype.setResult=function(value){this.result.copy(value)};THREE.VectorKeyframeTrack.prototype.lerpValues=function(value0,value1,alpha){return value0.lerp(value1,alpha)};THREE.VectorKeyframeTrack.prototype.compareValues=function(value0,value1){return value0.equals(value1)};THREE.VectorKeyframeTrack.prototype.clone=function(){var clonedKeys=[];for(var i=0;i<this.keys.length;i++){var key=this.keys[i];clonedKeys.push({time:key.time,value:key.value.clone()})}return new THREE.VectorKeyframeTrack(this.name,clonedKeys)};THREE.VectorKeyframeTrack.parse=function(json){var elementCount=json.keys[0].value.length;var valueType=THREE["Vector"+elementCount];var keys=[];for(var i=0;i<json.keys.length;i++){var jsonKey=json.keys[i];keys.push({value:(new valueType).fromArray(jsonKey.value),time:jsonKey.time})}return new THREE.VectorKeyframeTrack(json.name,keys)};THREE.QuaternionKeyframeTrack=function(name,keys){THREE.KeyframeTrack.call(this,name,keys);this.result=this.keys[0].value.clone()};THREE.QuaternionKeyframeTrack.prototype=Object.create(THREE.KeyframeTrack.prototype);THREE.QuaternionKeyframeTrack.prototype.constructor=THREE.QuaternionKeyframeTrack;THREE.QuaternionKeyframeTrack.prototype.setResult=function(value){this.result.copy(value)};THREE.QuaternionKeyframeTrack.prototype.lerpValues=function(value0,value1,alpha){return value0.slerp(value1,alpha)};THREE.QuaternionKeyframeTrack.prototype.compareValues=function(value0,value1){return value0.equals(value1)};THREE.QuaternionKeyframeTrack.prototype.multiply=function(quat){for(var i=0;i<this.keys.length;i++){this.keys[i].value.multiply(quat)}return this};THREE.QuaternionKeyframeTrack.prototype.clone=function(){var clonedKeys=[];for(var i=0;i<this.keys.length;i++){var key=this.keys[i];clonedKeys.push({time:key.time,value:key.value.clone()})}return new THREE.QuaternionKeyframeTrack(this.name,clonedKeys)};THREE.QuaternionKeyframeTrack.parse=function(json){var keys=[];for(var i=0;i<json.keys.length;i++){var jsonKey=json.keys[i];keys.push({value:(new THREE.Quaternion).fromArray(jsonKey.value),time:jsonKey.time})}return new THREE.QuaternionKeyframeTrack(json.name,keys)};THREE.StringKeyframeTrack=function(name,keys){THREE.KeyframeTrack.call(this,name,keys);this.result=this.keys[0].value};THREE.StringKeyframeTrack.prototype=Object.create(THREE.KeyframeTrack.prototype);THREE.StringKeyframeTrack.prototype.constructor=THREE.StringKeyframeTrack;THREE.StringKeyframeTrack.prototype.setResult=function(value){this.result=value};THREE.StringKeyframeTrack.prototype.lerpValues=function(value0,value1,alpha){return alpha<1?value0:value1};THREE.StringKeyframeTrack.prototype.compareValues=function(value0,value1){return value0===value1};THREE.StringKeyframeTrack.prototype.clone=function(){var clonedKeys=[];for(var i=0;i<this.keys.length;i++){var key=this.keys[i];clonedKeys.push({time:key.time,value:key.value})}return new THREE.StringKeyframeTrack(this.name,clonedKeys)};THREE.StringKeyframeTrack.parse=function(json){return new THREE.StringKeyframeTrack(json.name,json.keys)};THREE.BooleanKeyframeTrack=function(name,keys){THREE.KeyframeTrack.call(this,name,keys);this.result=this.keys[0].value};THREE.BooleanKeyframeTrack.prototype=Object.create(THREE.KeyframeTrack.prototype);THREE.BooleanKeyframeTrack.prototype.constructor=THREE.BooleanKeyframeTrack;THREE.BooleanKeyframeTrack.prototype.setResult=function(value){this.result=value};THREE.BooleanKeyframeTrack.prototype.lerpValues=function(value0,value1,alpha){return alpha<1?value0:value1};THREE.BooleanKeyframeTrack.prototype.compareValues=function(value0,value1){return value0===value1};THREE.BooleanKeyframeTrack.prototype.clone=function(){var clonedKeys=[];for(var i=0;i<this.keys.length;i++){var key=this.keys[i];clonedKeys.push({time:key.time,value:key.value})}return new THREE.BooleanKeyframeTrack(this.name,clonedKeys)};THREE.BooleanKeyframeTrack.parse=function(json){return new THREE.BooleanKeyframeTrack(json.name,json.keys)};THREE.NumberKeyframeTrack=function(name,keys){THREE.KeyframeTrack.call(this,name,keys);this.result=this.keys[0].value};THREE.NumberKeyframeTrack.prototype=Object.create(THREE.KeyframeTrack.prototype);THREE.NumberKeyframeTrack.prototype.constructor=THREE.NumberKeyframeTrack;THREE.NumberKeyframeTrack.prototype.setResult=function(value){this.result=value};THREE.NumberKeyframeTrack.prototype.lerpValues=function(value0,value1,alpha){return value0*(1-alpha)+value1*alpha};THREE.NumberKeyframeTrack.prototype.compareValues=function(value0,value1){return value0===value1};THREE.NumberKeyframeTrack.prototype.clone=function(){var clonedKeys=[];for(var i=0;i<this.keys.length;i++){var key=this.keys[i];clonedKeys.push({time:key.time,value:key.value})}return new THREE.NumberKeyframeTrack(this.name,clonedKeys)};THREE.NumberKeyframeTrack.parse=function(json){return new THREE.NumberKeyframeTrack(json.name,json.keys)};THREE.Camera=function(){THREE.Object3D.call(this);this.type="Camera";this.matrixWorldInverse=new THREE.Matrix4;this.projectionMatrix=new THREE.Matrix4};THREE.Camera.prototype=Object.create(THREE.Object3D.prototype);THREE.Camera.prototype.constructor=THREE.Camera;THREE.Camera.prototype.getWorldDirection=function(){var quaternion=new THREE.Quaternion;return function(optionalTarget){var result=optionalTarget||new THREE.Vector3;this.getWorldQuaternion(quaternion);return result.set(0,0,-1).applyQuaternion(quaternion)}}();THREE.Camera.prototype.lookAt=function(){var m1=new THREE.Matrix4;return function(vector){m1.lookAt(this.position,vector,this.up);this.quaternion.setFromRotationMatrix(m1)}}();THREE.Camera.prototype.clone=function(){return(new this.constructor).copy(this)};THREE.Camera.prototype.copy=function(source){THREE.Object3D.prototype.copy.call(this,source);this.matrixWorldInverse.copy(source.matrixWorldInverse);this.projectionMatrix.copy(source.projectionMatrix);return this};THREE.CubeCamera=function(near,far,cubeResolution){THREE.Object3D.call(this);this.type="CubeCamera";var fov=90,aspect=1;var cameraPX=new THREE.PerspectiveCamera(fov,aspect,near,far);cameraPX.up.set(0,-1,0);cameraPX.lookAt(new THREE.Vector3(1,0,0));this.add(cameraPX);var cameraNX=new THREE.PerspectiveCamera(fov,aspect,near,far);cameraNX.up.set(0,-1,0);cameraNX.lookAt(new THREE.Vector3(-1,0,0));this.add(cameraNX);var cameraPY=new THREE.PerspectiveCamera(fov,aspect,near,far);cameraPY.up.set(0,0,1);cameraPY.lookAt(new THREE.Vector3(0,1,0));this.add(cameraPY);var cameraNY=new THREE.PerspectiveCamera(fov,aspect,near,far);cameraNY.up.set(0,0,-1);cameraNY.lookAt(new THREE.Vector3(0,-1,0));this.add(cameraNY);var cameraPZ=new THREE.PerspectiveCamera(fov,aspect,near,far);cameraPZ.up.set(0,-1,0);cameraPZ.lookAt(new THREE.Vector3(0,0,1));this.add(cameraPZ);var cameraNZ=new THREE.PerspectiveCamera(fov,aspect,near,far);cameraNZ.up.set(0,-1,0);cameraNZ.lookAt(new THREE.Vector3(0,0,-1));this.add(cameraNZ);this.renderTarget=new THREE.WebGLRenderTargetCube(cubeResolution,cubeResolution,{format:THREE.RGBFormat,magFilter:THREE.LinearFilter,minFilter:THREE.LinearFilter});this.updateCubeMap=function(renderer,scene){if(this.parent===null)this.updateMatrixWorld();var renderTarget=this.renderTarget;var generateMipmaps=renderTarget.texture.generateMipmaps;renderTarget.texture.generateMipmaps=false;renderTarget.activeCubeFace=0;renderer.render(scene,cameraPX,renderTarget);renderTarget.activeCubeFace=1;renderer.render(scene,cameraNX,renderTarget);renderTarget.activeCubeFace=2;renderer.render(scene,cameraPY,renderTarget);renderTarget.activeCubeFace=3;renderer.render(scene,cameraNY,renderTarget);renderTarget.activeCubeFace=4;renderer.render(scene,cameraPZ,renderTarget);renderTarget.texture.generateMipmaps=generateMipmaps;renderTarget.activeCubeFace=5;renderer.render(scene,cameraNZ,renderTarget);renderer.setRenderTarget(null)}};THREE.CubeCamera.prototype=Object.create(THREE.Object3D.prototype);THREE.CubeCamera.prototype.constructor=THREE.CubeCamera;THREE.OrthographicCamera=function(left,right,top,bottom,near,far){THREE.Camera.call(this);this.type="OrthographicCamera";this.zoom=1;this.left=left;this.right=right;this.top=top;this.bottom=bottom;this.near=near!==undefined?near:.1;this.far=far!==undefined?far:2e3;this.updateProjectionMatrix()};THREE.OrthographicCamera.prototype=Object.create(THREE.Camera.prototype);THREE.OrthographicCamera.prototype.constructor=THREE.OrthographicCamera;THREE.OrthographicCamera.prototype.updateProjectionMatrix=function(){var dx=(this.right-this.left)/(2*this.zoom);var dy=(this.top-this.bottom)/(2*this.zoom);var cx=(this.right+this.left)/2;var cy=(this.top+this.bottom)/2;this.projectionMatrix.makeOrthographic(cx-dx,cx+dx,cy+dy,cy-dy,this.near,this.far)};THREE.OrthographicCamera.prototype.copy=function(source){THREE.Camera.prototype.copy.call(this,source);this.left=source.left;this.right=source.right;this.top=source.top;this.bottom=source.bottom;this.near=source.near;this.far=source.far;this.zoom=source.zoom;return this};THREE.OrthographicCamera.prototype.toJSON=function(meta){var data=THREE.Object3D.prototype.toJSON.call(this,meta);data.object.zoom=this.zoom;data.object.left=this.left;data.object.right=this.right;data.object.top=this.top;data.object.bottom=this.bottom;data.object.near=this.near;data.object.far=this.far;return data};THREE.PerspectiveCamera=function(fov,aspect,near,far){THREE.Camera.call(this);this.type="PerspectiveCamera";this.zoom=1;this.fov=fov!==undefined?fov:50;this.aspect=aspect!==undefined?aspect:1;this.near=near!==undefined?near:.1;this.far=far!==undefined?far:2e3;this.updateProjectionMatrix()};THREE.PerspectiveCamera.prototype=Object.create(THREE.Camera.prototype);THREE.PerspectiveCamera.prototype.constructor=THREE.PerspectiveCamera;THREE.PerspectiveCamera.prototype.setLens=function(focalLength,frameHeight){if(frameHeight===undefined)frameHeight=24;this.fov=2*THREE.Math.radToDeg(Math.atan(frameHeight/(focalLength*2)));this.updateProjectionMatrix()};THREE.PerspectiveCamera.prototype.setViewOffset=function(fullWidth,fullHeight,x,y,width,height){this.fullWidth=fullWidth;this.fullHeight=fullHeight;this.x=x;this.y=y;this.width=width;this.height=height;this.updateProjectionMatrix()};THREE.PerspectiveCamera.prototype.updateProjectionMatrix=function(){var fov=THREE.Math.radToDeg(2*Math.atan(Math.tan(THREE.Math.degToRad(this.fov)*.5)/this.zoom));if(this.fullWidth){var aspect=this.fullWidth/this.fullHeight;var top=Math.tan(THREE.Math.degToRad(fov*.5))*this.near;var bottom=-top;var left=aspect*bottom;var right=aspect*top;var width=Math.abs(right-left);var height=Math.abs(top-bottom);this.projectionMatrix.makeFrustum(left+this.x*width/this.fullWidth,left+(this.x+this.width)*width/this.fullWidth,top-(this.y+this.height)*height/this.fullHeight,top-this.y*height/this.fullHeight,this.near,this.far)}else{this.projectionMatrix.makePerspective(fov,this.aspect,this.near,this.far)}};THREE.PerspectiveCamera.prototype.copy=function(source){THREE.Camera.prototype.copy.call(this,source);this.fov=source.fov;this.aspect=source.aspect;this.near=source.near;this.far=source.far;this.zoom=source.zoom;return this};THREE.PerspectiveCamera.prototype.toJSON=function(meta){var data=THREE.Object3D.prototype.toJSON.call(this,meta);data.object.zoom=this.zoom;data.object.fov=this.fov;data.object.aspect=this.aspect;data.object.near=this.near;data.object.far=this.far;return data};THREE.Light=function(color){THREE.Object3D.call(this);this.type="Light";this.color=new THREE.Color(color);this.receiveShadow=undefined};THREE.Light.prototype=Object.create(THREE.Object3D.prototype);THREE.Light.prototype.constructor=THREE.Light;Object.defineProperties(THREE.Light.prototype,{onlyShadow:{set:function(value){console.warn("THREE.Light: .onlyShadow has been removed.")}},shadowCameraFov:{set:function(value){this.shadow.camera.fov=value}},shadowCameraLeft:{set:function(value){this.shadow.camera.left=value}},shadowCameraRight:{set:function(value){this.shadow.camera.right=value}},shadowCameraTop:{set:function(value){this.shadow.camera.top=value}},shadowCameraBottom:{set:function(value){this.shadow.camera.bottom=value}},shadowCameraNear:{set:function(value){this.shadow.camera.near=value}},shadowCameraFar:{set:function(value){this.shadow.camera.far=value}},shadowCameraVisible:{set:function(value){console.warn("THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow ) instead.")}},shadowBias:{set:function(value){this.shadow.bias=value}},shadowDarkness:{set:function(value){this.shadow.darkness=value}},shadowMapWidth:{set:function(value){this.shadow.mapSize.width=value}},shadowMapHeight:{set:function(value){this.shadow.mapSize.height=value}}});THREE.Light.prototype.copy=function(source){THREE.Object3D.prototype.copy.call(this,source);this.color.copy(source.color);return this};THREE.Light.prototype.toJSON=function(meta){var data=THREE.Object3D.prototype.toJSON.call(this,meta);data.object.color=this.color.getHex();if(this.groundColor!==undefined)data.object.groundColor=this.groundColor.getHex();if(this.intensity!==undefined)data.object.intensity=this.intensity;if(this.distance!==undefined)data.object.distance=this.distance;if(this.angle!==undefined)data.object.angle=this.angle;if(this.decay!==undefined)data.object.decay=this.decay;if(this.exponent!==undefined)data.object.exponent=this.exponent;return data};THREE.LightShadow=function(camera){this.camera=camera;this.bias=0;this.darkness=1;this.mapSize=new THREE.Vector2(512,512);this.map=null;this.matrix=null};THREE.LightShadow.prototype={constructor:THREE.LightShadow,copy:function(source){this.camera=source.camera.clone();this.bias=source.bias;this.darkness=source.darkness;this.mapSize.copy(source.mapSize)},clone:function(){return(new this.constructor).copy(this)}};THREE.AmbientLight=function(color){THREE.Light.call(this,color);this.type="AmbientLight";this.castShadow=undefined};THREE.AmbientLight.prototype=Object.create(THREE.Light.prototype);THREE.AmbientLight.prototype.constructor=THREE.AmbientLight;THREE.DirectionalLight=function(color,intensity){THREE.Light.call(this,color);this.type="DirectionalLight";this.position.set(0,1,0);this.updateMatrix();this.target=new THREE.Object3D;this.intensity=intensity!==undefined?intensity:1;this.shadow=new THREE.LightShadow(new THREE.OrthographicCamera(-500,500,500,-500,50,5e3))};THREE.DirectionalLight.prototype=Object.create(THREE.Light.prototype);THREE.DirectionalLight.prototype.constructor=THREE.DirectionalLight;THREE.DirectionalLight.prototype.copy=function(source){THREE.Light.prototype.copy.call(this,source);this.intensity=source.intensity;this.target=source.target.clone();this.shadow=source.shadow.clone();return this};THREE.HemisphereLight=function(skyColor,groundColor,intensity){THREE.Light.call(this,skyColor);this.type="HemisphereLight";this.castShadow=undefined;this.position.set(0,1,0);this.updateMatrix();this.groundColor=new THREE.Color(groundColor);this.intensity=intensity!==undefined?intensity:1;

        };THREE.HemisphereLight.prototype=Object.create(THREE.Light.prototype);THREE.HemisphereLight.prototype.constructor=THREE.HemisphereLight;THREE.HemisphereLight.prototype.copy=function(source){THREE.Light.prototype.copy.call(this,source);this.groundColor.copy(source.groundColor);this.intensity=source.intensity;return this};THREE.PointLight=function(color,intensity,distance,decay){THREE.Light.call(this,color);this.type="PointLight";this.intensity=intensity!==undefined?intensity:1;this.distance=distance!==undefined?distance:0;this.decay=decay!==undefined?decay:1;this.shadow=new THREE.LightShadow(new THREE.PerspectiveCamera(90,1,1,500))};THREE.PointLight.prototype=Object.create(THREE.Light.prototype);THREE.PointLight.prototype.constructor=THREE.PointLight;THREE.PointLight.prototype.copy=function(source){THREE.Light.prototype.copy.call(this,source);this.intensity=source.intensity;this.distance=source.distance;this.decay=source.decay;this.shadow=source.shadow.clone();return this};THREE.SpotLight=function(color,intensity,distance,angle,exponent,decay){THREE.Light.call(this,color);this.type="SpotLight";this.position.set(0,1,0);this.updateMatrix();this.target=new THREE.Object3D;this.intensity=intensity!==undefined?intensity:1;this.distance=distance!==undefined?distance:0;this.angle=angle!==undefined?angle:Math.PI/3;this.exponent=exponent!==undefined?exponent:10;this.decay=decay!==undefined?decay:1;this.shadow=new THREE.LightShadow(new THREE.PerspectiveCamera(50,1,50,5e3))};THREE.SpotLight.prototype=Object.create(THREE.Light.prototype);THREE.SpotLight.prototype.constructor=THREE.SpotLight;THREE.SpotLight.prototype.copy=function(source){THREE.Light.prototype.copy.call(this,source);this.intensity=source.intensity;this.distance=source.distance;this.angle=source.angle;this.exponent=source.exponent;this.decay=source.decay;this.target=source.target.clone();this.shadow=source.shadow.clone();return this};THREE.Cache={enabled:false,files:{},add:function(key,file){if(this.enabled===false)return;this.files[key]=file},get:function(key){if(this.enabled===false)return;return this.files[key]},remove:function(key){delete this.files[key]},clear:function(){this.files={}}};THREE.Loader=function(){this.onLoadStart=function(){};this.onLoadProgress=function(){};this.onLoadComplete=function(){}};THREE.Loader.prototype={constructor:THREE.Loader,crossOrigin:undefined,extractUrlBase:function(url){var parts=url.split("/");if(parts.length===1)return"./";parts.pop();return parts.join("/")+"/"},initMaterials:function(materials,texturePath,crossOrigin){var array=[];for(var i=0;i<materials.length;++i){array[i]=this.createMaterial(materials[i],texturePath,crossOrigin)}return array},createMaterial:function(){var color,textureLoader,materialLoader;return function(m,texturePath,crossOrigin){if(color===undefined)color=new THREE.Color;if(textureLoader===undefined)textureLoader=new THREE.TextureLoader;if(materialLoader===undefined)materialLoader=new THREE.MaterialLoader;var textures={};function loadTexture(path,repeat,offset,wrap,anisotropy){var fullPath=texturePath+path;var loader=THREE.Loader.Handlers.get(fullPath);var texture;if(loader!==null){texture=loader.load(fullPath)}else{textureLoader.setCrossOrigin(crossOrigin);texture=textureLoader.load(fullPath)}if(repeat!==undefined){texture.repeat.fromArray(repeat);if(repeat[0]!==1)texture.wrapS=THREE.RepeatWrapping;if(repeat[1]!==1)texture.wrapT=THREE.RepeatWrapping}if(offset!==undefined){texture.offset.fromArray(offset)}if(wrap!==undefined){if(wrap[0]==="repeat")texture.wrapS=THREE.RepeatWrapping;if(wrap[0]==="mirror")texture.wrapS=THREE.MirroredRepeatWrapping;if(wrap[1]==="repeat")texture.wrapT=THREE.RepeatWrapping;if(wrap[1]==="mirror")texture.wrapT=THREE.MirroredRepeatWrapping}if(anisotropy!==undefined){texture.anisotropy=anisotropy}var uuid=THREE.Math.generateUUID();textures[uuid]=texture;return uuid}var json={uuid:THREE.Math.generateUUID(),type:"MeshLambertMaterial"};for(var name in m){var value=m[name];switch(name){case"DbgColor":json.color=value;break;case"DbgIndex":case"opticalDensity":case"illumination":break;case"DbgName":json.name=value;break;case"blending":json.blending=THREE[value];break;case"colorDiffuse":json.color=color.fromArray(value).getHex();break;case"colorSpecular":json.specular=color.fromArray(value).getHex();break;case"colorEmissive":json.emissive=color.fromArray(value).getHex();break;case"specularCoef":json.shininess=value;break;case"shading":if(value.toLowerCase()==="basic")json.type="MeshBasicMaterial";if(value.toLowerCase()==="phong")json.type="MeshPhongMaterial";break;case"mapDiffuse":json.map=loadTexture(value,m.mapDiffuseRepeat,m.mapDiffuseOffset,m.mapDiffuseWrap,m.mapDiffuseAnisotropy);break;case"mapDiffuseRepeat":case"mapDiffuseOffset":case"mapDiffuseWrap":case"mapDiffuseAnisotropy":break;case"mapLight":json.lightMap=loadTexture(value,m.mapLightRepeat,m.mapLightOffset,m.mapLightWrap,m.mapLightAnisotropy);break;case"mapLightRepeat":case"mapLightOffset":case"mapLightWrap":case"mapLightAnisotropy":break;case"mapAO":json.aoMap=loadTexture(value,m.mapAORepeat,m.mapAOOffset,m.mapAOWrap,m.mapAOAnisotropy);break;case"mapAORepeat":case"mapAOOffset":case"mapAOWrap":case"mapAOAnisotropy":break;case"mapBump":json.bumpMap=loadTexture(value,m.mapBumpRepeat,m.mapBumpOffset,m.mapBumpWrap,m.mapBumpAnisotropy);break;case"mapBumpScale":json.bumpScale=value;break;case"mapBumpRepeat":case"mapBumpOffset":case"mapBumpWrap":case"mapBumpAnisotropy":break;case"mapNormal":json.normalMap=loadTexture(value,m.mapNormalRepeat,m.mapNormalOffset,m.mapNormalWrap,m.mapNormalAnisotropy);break;case"mapNormalFactor":json.normalScale=[value,value];break;case"mapNormalRepeat":case"mapNormalOffset":case"mapNormalWrap":case"mapNormalAnisotropy":break;case"mapSpecular":json.specularMap=loadTexture(value,m.mapSpecularRepeat,m.mapSpecularOffset,m.mapSpecularWrap,m.mapSpecularAnisotropy);break;case"mapSpecularRepeat":case"mapSpecularOffset":case"mapSpecularWrap":case"mapSpecularAnisotropy":break;case"mapAlpha":json.alphaMap=loadTexture(value,m.mapAlphaRepeat,m.mapAlphaOffset,m.mapAlphaWrap,m.mapAlphaAnisotropy);break;case"mapAlphaRepeat":case"mapAlphaOffset":case"mapAlphaWrap":case"mapAlphaAnisotropy":break;case"flipSided":json.side=THREE.BackSide;break;case"doubleSided":json.side=THREE.DoubleSide;break;case"transparency":console.warn("THREE.Loader: transparency has been renamed to opacity");json.opacity=value;break;case"opacity":case"transparent":case"depthTest":case"depthWrite":case"transparent":case"visible":case"wireframe":json[name]=value;break;case"vertexColors":if(value===true)json.vertexColors=THREE.VertexColors;if(value==="face")json.vertexColors=THREE.FaceColors;break;default:console.error("Loader.createMaterial: Unsupported",name,value);break}}if(json.type!=="MeshPhongMaterial")delete json.specular;if(json.opacity<1)json.transparent=true;materialLoader.setTextures(textures);return materialLoader.parse(json)}}()};THREE.Loader.Handlers={handlers:[],add:function(regex,loader){this.handlers.push(regex,loader)},get:function(file){var handlers=this.handlers;for(var i=0,l=handlers.length;i<l;i+=2){var regex=handlers[i];var loader=handlers[i+1];if(regex.test(file)){return loader}}return null}};THREE.XHRLoader=function(manager){this.manager=manager!==undefined?manager:THREE.DefaultLoadingManager};THREE.XHRLoader.prototype={constructor:THREE.XHRLoader,load:function(url,onLoad,onProgress,onError){var scope=this;var cached=THREE.Cache.get(url);if(cached!==undefined){if(onLoad){setTimeout(function(){onLoad(cached)},0)}return cached}var request=new XMLHttpRequest;request.open("GET",url,true);request.addEventListener("load",function(event){var response=event.target.response;THREE.Cache.add(url,response);if(onLoad)onLoad(response);scope.manager.itemEnd(url)},false);if(onProgress!==undefined){request.addEventListener("progress",function(event){onProgress(event)},false)}request.addEventListener("error",function(event){if(onError)onError(event);scope.manager.itemError(url)},false);if(this.crossOrigin!==undefined)request.crossOrigin=this.crossOrigin;if(this.responseType!==undefined)request.responseType=this.responseType;if(this.withCredentials!==undefined)request.withCredentials=this.withCredentials;request.send(null);scope.manager.itemStart(url);return request},setResponseType:function(value){this.responseType=value},setCrossOrigin:function(value){this.crossOrigin=value},setWithCredentials:function(value){this.withCredentials=value}};THREE.ImageLoader=function(manager){this.manager=manager!==undefined?manager:THREE.DefaultLoadingManager};THREE.ImageLoader.prototype={constructor:THREE.ImageLoader,load:function(url,onLoad,onProgress,onError){var scope=this;var cached=THREE.Cache.get(url);if(cached!==undefined){scope.manager.itemStart(url);if(onLoad){setTimeout(function(){onLoad(cached);scope.manager.itemEnd(url)},0)}else{scope.manager.itemEnd(url)}return cached}var image=document.createElement("img");image.addEventListener("load",function(event){THREE.Cache.add(url,this);if(onLoad)onLoad(this);scope.manager.itemEnd(url)},false);if(onProgress!==undefined){image.addEventListener("progress",function(event){onProgress(event)},false)}image.addEventListener("error",function(event){if(onError)onError(event);scope.manager.itemError(url)},false);if(this.crossOrigin!==undefined)image.crossOrigin=this.crossOrigin;scope.manager.itemStart(url);image.src=url;return image},setCrossOrigin:function(value){this.crossOrigin=value}};THREE.JSONLoader=function(manager){if(typeof manager==="boolean"){console.warn("THREE.JSONLoader: showStatus parameter has been removed from constructor.");manager=undefined}this.manager=manager!==undefined?manager:THREE.DefaultLoadingManager;this.withCredentials=false};THREE.JSONLoader.prototype={constructor:THREE.JSONLoader,get statusDomElement(){if(this._statusDomElement===undefined){this._statusDomElement=document.createElement("div")}console.warn("THREE.JSONLoader: .statusDomElement has been removed.");return this._statusDomElement},load:function(url,onLoad,onProgress,onError){var scope=this;var texturePath=this.texturePath&&typeof this.texturePath==="string"?this.texturePath:THREE.Loader.prototype.extractUrlBase(url);var loader=new THREE.XHRLoader(this.manager);loader.setCrossOrigin(this.crossOrigin);loader.setWithCredentials(this.withCredentials);loader.load(url,function(text){var json=JSON.parse(text);var metadata=json.metadata;if(metadata!==undefined){if(metadata.type==="object"){console.error("THREE.JSONLoader: "+url+" should be loaded with THREE.ObjectLoader instead.");return}if(metadata.type==="scene"){console.error("THREE.JSONLoader: "+url+" should be loaded with THREE.SceneLoader instead.");return}}var object=scope.parse(json,texturePath);onLoad(object.geometry,object.materials)})},setCrossOrigin:function(value){this.crossOrigin=value},setTexturePath:function(value){this.texturePath=value},parse:function(json,texturePath){var geometry=new THREE.Geometry,scale=json.scale!==undefined?1/json.scale:1;parseModel(scale);parseSkin();parseMorphing(scale);parseAnimations();geometry.computeFaceNormals();geometry.computeBoundingSphere();function parseModel(scale){function isBitSet(value,position){return value&1<<position}var i,j,fi,offset,zLength,colorIndex,normalIndex,uvIndex,materialIndex,type,isQuad,hasMaterial,hasFaceVertexUv,hasFaceNormal,hasFaceVertexNormal,hasFaceColor,hasFaceVertexColor,vertex,face,faceA,faceB,hex,normal,uvLayer,uv,u,v,faces=json.faces,vertices=json.vertices,normals=json.normals,colors=json.colors,nUvLayers=0;if(json.uvs!==undefined){for(i=0;i<json.uvs.length;i++){if(json.uvs[i].length)nUvLayers++}for(i=0;i<nUvLayers;i++){geometry.faceVertexUvs[i]=[]}}offset=0;zLength=vertices.length;while(offset<zLength){vertex=new THREE.Vector3;vertex.x=vertices[offset++]*scale;vertex.y=vertices[offset++]*scale;vertex.z=vertices[offset++]*scale;geometry.vertices.push(vertex)}offset=0;zLength=faces.length;while(offset<zLength){type=faces[offset++];isQuad=isBitSet(type,0);hasMaterial=isBitSet(type,1);hasFaceVertexUv=isBitSet(type,3);hasFaceNormal=isBitSet(type,4);hasFaceVertexNormal=isBitSet(type,5);hasFaceColor=isBitSet(type,6);hasFaceVertexColor=isBitSet(type,7);if(isQuad){faceA=new THREE.Face3;faceA.a=faces[offset];faceA.b=faces[offset+1];faceA.c=faces[offset+3];faceB=new THREE.Face3;faceB.a=faces[offset+1];faceB.b=faces[offset+2];faceB.c=faces[offset+3];offset+=4;if(hasMaterial){materialIndex=faces[offset++];faceA.materialIndex=materialIndex;faceB.materialIndex=materialIndex}fi=geometry.faces.length;if(hasFaceVertexUv){for(i=0;i<nUvLayers;i++){uvLayer=json.uvs[i];geometry.faceVertexUvs[i][fi]=[];geometry.faceVertexUvs[i][fi+1]=[];for(j=0;j<4;j++){uvIndex=faces[offset++];u=uvLayer[uvIndex*2];v=uvLayer[uvIndex*2+1];uv=new THREE.Vector2(u,v);if(j!==2)geometry.faceVertexUvs[i][fi].push(uv);if(j!==0)geometry.faceVertexUvs[i][fi+1].push(uv)}}}if(hasFaceNormal){normalIndex=faces[offset++]*3;faceA.normal.set(normals[normalIndex++],normals[normalIndex++],normals[normalIndex]);faceB.normal.copy(faceA.normal)}if(hasFaceVertexNormal){for(i=0;i<4;i++){normalIndex=faces[offset++]*3;normal=new THREE.Vector3(normals[normalIndex++],normals[normalIndex++],normals[normalIndex]);if(i!==2)faceA.vertexNormals.push(normal);if(i!==0)faceB.vertexNormals.push(normal)}}if(hasFaceColor){colorIndex=faces[offset++];hex=colors[colorIndex];faceA.color.setHex(hex);faceB.color.setHex(hex)}if(hasFaceVertexColor){for(i=0;i<4;i++){colorIndex=faces[offset++];hex=colors[colorIndex];if(i!==2)faceA.vertexColors.push(new THREE.Color(hex));if(i!==0)faceB.vertexColors.push(new THREE.Color(hex))}}geometry.faces.push(faceA);geometry.faces.push(faceB)}else{face=new THREE.Face3;face.a=faces[offset++];face.b=faces[offset++];face.c=faces[offset++];if(hasMaterial){materialIndex=faces[offset++];face.materialIndex=materialIndex}fi=geometry.faces.length;if(hasFaceVertexUv){for(i=0;i<nUvLayers;i++){uvLayer=json.uvs[i];geometry.faceVertexUvs[i][fi]=[];for(j=0;j<3;j++){uvIndex=faces[offset++];u=uvLayer[uvIndex*2];v=uvLayer[uvIndex*2+1];uv=new THREE.Vector2(u,v);geometry.faceVertexUvs[i][fi].push(uv)}}}if(hasFaceNormal){normalIndex=faces[offset++]*3;face.normal.set(normals[normalIndex++],normals[normalIndex++],normals[normalIndex])}if(hasFaceVertexNormal){for(i=0;i<3;i++){normalIndex=faces[offset++]*3;normal=new THREE.Vector3(normals[normalIndex++],normals[normalIndex++],normals[normalIndex]);face.vertexNormals.push(normal)}}if(hasFaceColor){colorIndex=faces[offset++];face.color.setHex(colors[colorIndex])}if(hasFaceVertexColor){for(i=0;i<3;i++){colorIndex=faces[offset++];face.vertexColors.push(new THREE.Color(colors[colorIndex]))}}geometry.faces.push(face)}}}function parseSkin(){var influencesPerVertex=json.influencesPerVertex!==undefined?json.influencesPerVertex:2;if(json.skinWeights){for(var i=0,l=json.skinWeights.length;i<l;i+=influencesPerVertex){var x=json.skinWeights[i];var y=influencesPerVertex>1?json.skinWeights[i+1]:0;var z=influencesPerVertex>2?json.skinWeights[i+2]:0;var w=influencesPerVertex>3?json.skinWeights[i+3]:0;geometry.skinWeights.push(new THREE.Vector4(x,y,z,w))}}if(json.skinIndices){for(var i=0,l=json.skinIndices.length;i<l;i+=influencesPerVertex){var a=json.skinIndices[i];var b=influencesPerVertex>1?json.skinIndices[i+1]:0;var c=influencesPerVertex>2?json.skinIndices[i+2]:0;var d=influencesPerVertex>3?json.skinIndices[i+3]:0;geometry.skinIndices.push(new THREE.Vector4(a,b,c,d))}}geometry.bones=json.bones;if(geometry.bones&&geometry.bones.length>0&&(geometry.skinWeights.length!==geometry.skinIndices.length||geometry.skinIndices.length!==geometry.vertices.length)){console.warn("When skinning, number of vertices ("+geometry.vertices.length+"), skinIndices ("+geometry.skinIndices.length+"), and skinWeights ("+geometry.skinWeights.length+") should match.")}}function parseMorphing(scale){if(json.morphTargets!==undefined){for(var i=0,l=json.morphTargets.length;i<l;i++){geometry.morphTargets[i]={};geometry.morphTargets[i].name=json.morphTargets[i].name;geometry.morphTargets[i].vertices=[];var dstVertices=geometry.morphTargets[i].vertices;var srcVertices=json.morphTargets[i].vertices;for(var v=0,vl=srcVertices.length;v<vl;v+=3){var vertex=new THREE.Vector3;vertex.x=srcVertices[v]*scale;vertex.y=srcVertices[v+1]*scale;vertex.z=srcVertices[v+2]*scale;dstVertices.push(vertex)}}}if(json.morphColors!==undefined&&json.morphColors.length>0){console.warn('THREE.JSONLoader: "morphColors" no longer supported. Using them as face colors.');var faces=geometry.faces;var morphColors=json.morphColors[0].colors;for(var i=0,l=faces.length;i<l;i++){faces[i].color.fromArray(morphColors,i*3)}}}function parseAnimations(){var outputAnimations=[];var animations=[];if(json.animation!==undefined){animations.push(json.animation)}if(json.animations!==undefined){if(json.animations.length){animations=animations.concat(json.animations)}else{animations.push(json.animations)}}for(var i=0;i<animations.length;i++){var clip=THREE.AnimationClip.parseAnimation(animations[i],geometry.bones);if(clip)outputAnimations.push(clip)}if(geometry.morphTargets){var morphAnimationClips=THREE.AnimationClip.CreateClipsFromMorphTargetSequences(geometry.morphTargets,10);outputAnimations=outputAnimations.concat(morphAnimationClips)}if(outputAnimations.length>0)geometry.animations=outputAnimations}if(json.materials===undefined||json.materials.length===0){return{geometry:geometry}}else{var materials=THREE.Loader.prototype.initMaterials(json.materials,texturePath,this.crossOrigin);return{geometry:geometry,materials:materials}}}};THREE.LoadingManager=function(onLoad,onProgress,onError){var scope=this;var isLoading=false,itemsLoaded=0,itemsTotal=0;this.onStart=undefined;this.onLoad=onLoad;this.onProgress=onProgress;this.onError=onError;this.itemStart=function(url){itemsTotal++;if(isLoading===false){if(scope.onStart!==undefined){scope.onStart(url,itemsLoaded,itemsTotal)}}isLoading=true};this.itemEnd=function(url){itemsLoaded++;if(scope.onProgress!==undefined){scope.onProgress(url,itemsLoaded,itemsTotal)}if(itemsLoaded===itemsTotal){isLoading=false;if(scope.onLoad!==undefined){scope.onLoad()}}};this.itemError=function(url){if(scope.onError!==undefined){scope.onError(url)}}};THREE.DefaultLoadingManager=new THREE.LoadingManager;THREE.BufferGeometryLoader=function(manager){this.manager=manager!==undefined?manager:THREE.DefaultLoadingManager};THREE.BufferGeometryLoader.prototype={constructor:THREE.BufferGeometryLoader,load:function(url,onLoad,onProgress,onError){var scope=this;var loader=new THREE.XHRLoader(scope.manager);loader.setCrossOrigin(this.crossOrigin);loader.load(url,function(text){onLoad(scope.parse(JSON.parse(text)))},onProgress,onError)},setCrossOrigin:function(value){this.crossOrigin=value},parse:function(json){var geometry=new THREE.BufferGeometry;var index=json.data.index;if(index!==undefined){var typedArray=new self[index.type](index.array);geometry.setIndex(new THREE.BufferAttribute(typedArray,1))}var attributes=json.data.attributes;for(var key in attributes){var attribute=attributes[key];var typedArray=new self[attribute.type](attribute.array);geometry.addAttribute(key,new THREE.BufferAttribute(typedArray,attribute.itemSize))}var groups=json.data.groups||json.data.drawcalls||json.data.offsets;if(groups!==undefined){for(var i=0,n=groups.length;i!==n;++i){var group=groups[i];geometry.addGroup(group.start,group.count)}}var boundingSphere=json.data.boundingSphere;if(boundingSphere!==undefined){var center=new THREE.Vector3;if(boundingSphere.center!==undefined){center.fromArray(boundingSphere.center)}geometry.boundingSphere=new THREE.Sphere(center,boundingSphere.radius)}return geometry}};THREE.MaterialLoader=function(manager){this.manager=manager!==undefined?manager:THREE.DefaultLoadingManager;this.textures={}};THREE.MaterialLoader.prototype={constructor:THREE.MaterialLoader,load:function(url,onLoad,onProgress,onError){var scope=this;var loader=new THREE.XHRLoader(scope.manager);loader.setCrossOrigin(this.crossOrigin);loader.load(url,function(text){onLoad(scope.parse(JSON.parse(text)))},onProgress,onError)},setCrossOrigin:function(value){this.crossOrigin=value},setTextures:function(value){this.textures=value},getTexture:function(name){var textures=this.textures;if(textures[name]===undefined){console.warn("THREE.MaterialLoader: Undefined texture",name)}return textures[name]},parse:function(json){var material=new THREE[json.type];material.uuid=json.uuid;if(json.name!==undefined)material.name=json.name;if(json.color!==undefined)material.color.setHex(json.color);if(json.emissive!==undefined)material.emissive.setHex(json.emissive);if(json.specular!==undefined)material.specular.setHex(json.specular);if(json.shininess!==undefined)material.shininess=json.shininess;if(json.uniforms!==undefined)material.uniforms=json.uniforms;if(json.vertexShader!==undefined)material.vertexShader=json.vertexShader;if(json.fragmentShader!==undefined)material.fragmentShader=json.fragmentShader;if(json.vertexColors!==undefined)material.vertexColors=json.vertexColors;if(json.shading!==undefined)material.shading=json.shading;if(json.blending!==undefined)material.blending=json.blending;if(json.side!==undefined)material.side=json.side;if(json.opacity!==undefined)material.opacity=json.opacity;if(json.transparent!==undefined)material.transparent=json.transparent;if(json.alphaTest!==undefined)material.alphaTest=json.alphaTest;if(json.depthTest!==undefined)material.depthTest=json.depthTest;if(json.depthWrite!==undefined)material.depthWrite=json.depthWrite;if(json.wireframe!==undefined)material.wireframe=json.wireframe;if(json.wireframeLinewidth!==undefined)material.wireframeLinewidth=json.wireframeLinewidth;if(json.size!==undefined)material.size=json.size;if(json.sizeAttenuation!==undefined)material.sizeAttenuation=json.sizeAttenuation;if(json.map!==undefined)material.map=this.getTexture(json.map);if(json.alphaMap!==undefined){material.alphaMap=this.getTexture(json.alphaMap);material.transparent=true}if(json.bumpMap!==undefined)material.bumpMap=this.getTexture(json.bumpMap);if(json.bumpScale!==undefined)material.bumpScale=json.bumpScale;if(json.normalMap!==undefined)material.normalMap=this.getTexture(json.normalMap);if(json.normalScale)material.normalScale=new THREE.Vector2(json.normalScale,json.normalScale);if(json.displacementMap!==undefined)material.displacementMap=this.getTexture(json.displacementMap);if(json.displacementScale!==undefined)material.displacementScale=json.displacementScale;if(json.displacementBias!==undefined)material.displacementBias=json.displacementBias;if(json.specularMap!==undefined)material.specularMap=this.getTexture(json.specularMap);if(json.envMap!==undefined){material.envMap=this.getTexture(json.envMap);material.combine=THREE.MultiplyOperation}if(json.reflectivity)material.reflectivity=json.reflectivity;if(json.lightMap!==undefined)material.lightMap=this.getTexture(json.lightMap);if(json.lightMapIntensity!==undefined)material.lightMapIntensity=json.lightMapIntensity;if(json.aoMap!==undefined)material.aoMap=this.getTexture(json.aoMap);if(json.aoMapIntensity!==undefined)material.aoMapIntensity=json.aoMapIntensity;if(json.materials!==undefined){for(var i=0,l=json.materials.length;i<l;i++){material.materials.push(this.parse(json.materials[i]))}}return material}};THREE.ObjectLoader=function(manager){this.manager=manager!==undefined?manager:THREE.DefaultLoadingManager;this.texturePath=""};THREE.ObjectLoader.prototype={constructor:THREE.ObjectLoader,load:function(url,onLoad,onProgress,onError){if(this.texturePath===""){this.texturePath=url.substring(0,url.lastIndexOf("/")+1)}var scope=this;var loader=new THREE.XHRLoader(scope.manager);loader.setCrossOrigin(this.crossOrigin);loader.load(url,function(text){scope.parse(JSON.parse(text),onLoad)},onProgress,onError)},setTexturePath:function(value){this.texturePath=value},setCrossOrigin:function(value){this.crossOrigin=value},parse:function(json,onLoad){var geometries=this.parseGeometries(json.geometries);var images=this.parseImages(json.images,function(){if(onLoad!==undefined)onLoad(object)});var textures=this.parseTextures(json.textures,images);var materials=this.parseMaterials(json.materials,textures);var object=this.parseObject(json.object,geometries,materials);if(json.animations){object.animations=this.parseAnimations(json.animations)}if(json.images===undefined||json.images.length===0){if(onLoad!==undefined)onLoad(object)}return object},parseGeometries:function(json){var geometries={};if(json!==undefined){var geometryLoader=new THREE.JSONLoader;var bufferGeometryLoader=new THREE.BufferGeometryLoader;for(var i=0,l=json.length;i<l;i++){var geometry;var data=json[i];switch(data.type){case"PlaneGeometry":case"PlaneBufferGeometry":geometry=new THREE[data.type](data.width,data.height,data.widthSegments,data.heightSegments);break;case"BoxGeometry":case"CubeGeometry":geometry=new THREE.BoxGeometry(data.width,data.height,data.depth,data.widthSegments,data.heightSegments,data.depthSegments);break;case"CircleBufferGeometry":geometry=new THREE.CircleBufferGeometry(data.radius,data.segments,data.thetaStart,data.thetaLength);break;case"CircleGeometry":geometry=new THREE.CircleGeometry(data.radius,data.segments,data.thetaStart,data.thetaLength);break;case"CylinderGeometry":geometry=new THREE.CylinderGeometry(data.radiusTop,data.radiusBottom,data.height,data.radialSegments,data.heightSegments,data.openEnded,data.thetaStart,data.thetaLength);break;case"SphereGeometry":geometry=new THREE.SphereGeometry(data.radius,data.widthSegments,data.heightSegments,data.phiStart,data.phiLength,data.thetaStart,data.thetaLength);break;case"SphereBufferGeometry":geometry=new THREE.SphereBufferGeometry(data.radius,data.widthSegments,data.heightSegments,data.phiStart,data.phiLength,data.thetaStart,data.thetaLength);break;case"DodecahedronGeometry":geometry=new THREE.DodecahedronGeometry(data.radius,data.detail);break;case"IcosahedronGeometry":geometry=new THREE.IcosahedronGeometry(data.radius,data.detail);break;case"OctahedronGeometry":geometry=new THREE.OctahedronGeometry(data.radius,data.detail);break;case"TetrahedronGeometry":geometry=new THREE.TetrahedronGeometry(data.radius,data.detail);break;case"RingGeometry":geometry=new THREE.RingGeometry(data.innerRadius,data.outerRadius,data.thetaSegments,data.phiSegments,data.thetaStart,data.thetaLength);break;case"TorusGeometry":geometry=new THREE.TorusGeometry(data.radius,data.tube,data.radialSegments,data.tubularSegments,data.arc);break;case"TorusKnotGeometry":geometry=new THREE.TorusKnotGeometry(data.radius,data.tube,data.radialSegments,data.tubularSegments,data.p,data.q,data.heightScale);break;case"BufferGeometry":geometry=bufferGeometryLoader.parse(data);break;case"Geometry":geometry=geometryLoader.parse(data.data,this.texturePath).geometry;break;default:console.warn('THREE.ObjectLoader: Unsupported geometry type "'+data.type+'"');continue}geometry.uuid=data.uuid;if(data.name!==undefined)geometry.name=data.name;geometries[data.uuid]=geometry}}return geometries},parseMaterials:function(json,textures){var materials={};if(json!==undefined){var loader=new THREE.MaterialLoader;loader.setTextures(textures);for(var i=0,l=json.length;i<l;i++){var material=loader.parse(json[i]);materials[material.uuid]=material}}return materials},parseAnimations:function(json){var animations=[];for(var i=0;i<json.length;i++){var clip=THREE.AnimationClip.parse(json[i]);animations.push(clip)}return animations},parseImages:function(json,onLoad){var scope=this;var images={};function loadImage(url){scope.manager.itemStart(url);return loader.load(url,function(){scope.manager.itemEnd(url)})}if(json!==undefined&&json.length>0){var manager=new THREE.LoadingManager(onLoad);var loader=new THREE.ImageLoader(manager);loader.setCrossOrigin(this.crossOrigin);for(var i=0,l=json.length;i<l;i++){var image=json[i];var path=/^(\/\/)|([a-z]+:(\/\/)?)/i.test(image.url)?image.url:scope.texturePath+image.url;images[image.uuid]=loadImage(path)}}return images},parseTextures:function(json,images){function parseConstant(value){if(typeof value==="number")return value;console.warn("THREE.ObjectLoader.parseTexture: Constant should be in numeric form.",value);return THREE[value]}var textures={};if(json!==undefined){for(var i=0,l=json.length;i<l;i++){var data=json[i];if(data.image===undefined){console.warn('THREE.ObjectLoader: No "image" specified for',data.uuid)}if(images[data.image]===undefined){console.warn("THREE.ObjectLoader: Undefined image",data.image)}var texture=new THREE.Texture(images[data.image]);texture.needsUpdate=true;texture.uuid=data.uuid;if(data.name!==undefined)texture.name=data.name;if(data.mapping!==undefined)texture.mapping=parseConstant(data.mapping);if(data.offset!==undefined)texture.offset=new THREE.Vector2(data.offset[0],data.offset[1]);if(data.repeat!==undefined)texture.repeat=new THREE.Vector2(data.repeat[0],data.repeat[1]);if(data.minFilter!==undefined)texture.minFilter=parseConstant(data.minFilter);if(data.magFilter!==undefined)texture.magFilter=parseConstant(data.magFilter);if(data.anisotropy!==undefined)texture.anisotropy=data.anisotropy;if(Array.isArray(data.wrap)){texture.wrapS=parseConstant(data.wrap[0]);texture.wrapT=parseConstant(data.wrap[1])}textures[data.uuid]=texture}}return textures},parseObject:function(){var matrix=new THREE.Matrix4;return function(data,geometries,materials){var object;function getGeometry(name){if(geometries[name]===undefined){console.warn("THREE.ObjectLoader: Undefined geometry",name)}return geometries[name]}function getMaterial(name){if(name===undefined)return undefined;if(materials[name]===undefined){console.warn("THREE.ObjectLoader: Undefined material",name)}return materials[name]}switch(data.type){case"Scene":object=new THREE.Scene;break;case"PerspectiveCamera":object=new THREE.PerspectiveCamera(data.fov,data.aspect,data.near,data.far);break;case"OrthographicCamera":object=new THREE.OrthographicCamera(data.left,data.right,data.top,data.bottom,data.near,data.far);break;case"AmbientLight":object=new THREE.AmbientLight(data.color);break;case"DirectionalLight":object=new THREE.DirectionalLight(data.color,data.intensity);break;case"PointLight":object=new THREE.PointLight(data.color,data.intensity,data.distance,data.decay);break;case"SpotLight":object=new THREE.SpotLight(data.color,data.intensity,data.distance,data.angle,data.exponent,data.decay);break;case"HemisphereLight":object=new THREE.HemisphereLight(data.color,data.groundColor,data.intensity);break;case"Mesh":object=new THREE.Mesh(getGeometry(data.geometry),getMaterial(data.material));break;case"LOD":object=new THREE.LOD;break;case"Line":object=new THREE.Line(getGeometry(data.geometry),getMaterial(data.material),data.mode);break;case"PointCloud":case"Points":object=new THREE.Points(getGeometry(data.geometry),getMaterial(data.material));break;case"Sprite":object=new THREE.Sprite(getMaterial(data.material));break;case"Group":object=new THREE.Group;break;default:object=new THREE.Object3D}object.uuid=data.uuid;if(data.name!==undefined)object.name=data.name;if(data.matrix!==undefined){matrix.fromArray(data.matrix);matrix.decompose(object.position,object.quaternion,object.scale)}else{if(data.position!==undefined)object.position.fromArray(data.position);if(data.rotation!==undefined)object.rotation.fromArray(data.rotation);if(data.scale!==undefined)object.scale.fromArray(data.scale)}if(data.castShadow!==undefined)object.castShadow=data.castShadow;if(data.receiveShadow!==undefined)object.receiveShadow=data.receiveShadow;if(data.visible!==undefined)object.visible=data.visible;if(data.userData!==undefined)object.userData=data.userData;if(data.children!==undefined){for(var child in data.children){object.add(this.parseObject(data.children[child],geometries,materials))}}if(data.type==="LOD"){var levels=data.levels;for(var l=0;l<levels.length;l++){var level=levels[l];var child=object.getObjectByProperty("uuid",level.object);if(child!==undefined){object.addLevel(child,level.distance);

        }}}return object}}()};THREE.TextureLoader=function(manager){this.manager=manager!==undefined?manager:THREE.DefaultLoadingManager};THREE.TextureLoader.prototype={constructor:THREE.TextureLoader,load:function(url,onLoad,onProgress,onError){var texture=new THREE.Texture;var loader=new THREE.ImageLoader(this.manager);loader.setCrossOrigin(this.crossOrigin);loader.load(url,function(image){texture.image=image;texture.needsUpdate=true;if(onLoad!==undefined){onLoad(texture)}},onProgress,onError);return texture},setCrossOrigin:function(value){this.crossOrigin=value}};THREE.CubeTextureLoader=function(manager){this.manager=manager!==undefined?manager:THREE.DefaultLoadingManager};THREE.CubeTextureLoader.prototype={constructor:THREE.CubeTextureLoader,load:function(urls,onLoad,onProgress,onError){var texture=new THREE.CubeTexture([]);var loader=new THREE.ImageLoader;loader.setCrossOrigin(this.crossOrigin);var loaded=0;function loadTexture(i){loader.load(urls[i],function(image){texture.images[i]=image;loaded++;if(loaded===6){texture.needsUpdate=true;if(onLoad)onLoad(texture)}},undefined,onError)}for(var i=0;i<urls.length;++i){loadTexture(i)}return texture},setCrossOrigin:function(value){this.crossOrigin=value}};THREE.DataTextureLoader=THREE.BinaryTextureLoader=function(manager){this.manager=manager!==undefined?manager:THREE.DefaultLoadingManager;this._parser=null};THREE.BinaryTextureLoader.prototype={constructor:THREE.BinaryTextureLoader,load:function(url,onLoad,onProgress,onError){var scope=this;var texture=new THREE.DataTexture;var loader=new THREE.XHRLoader(this.manager);loader.setCrossOrigin(this.crossOrigin);loader.setResponseType("arraybuffer");loader.load(url,function(buffer){var texData=scope._parser(buffer);if(!texData)return;if(undefined!==texData.image){texture.image=texData.image}else if(undefined!==texData.data){texture.image.width=texData.width;texture.image.height=texData.height;texture.image.data=texData.data}texture.wrapS=undefined!==texData.wrapS?texData.wrapS:THREE.ClampToEdgeWrapping;texture.wrapT=undefined!==texData.wrapT?texData.wrapT:THREE.ClampToEdgeWrapping;texture.magFilter=undefined!==texData.magFilter?texData.magFilter:THREE.LinearFilter;texture.minFilter=undefined!==texData.minFilter?texData.minFilter:THREE.LinearMipMapLinearFilter;texture.anisotropy=undefined!==texData.anisotropy?texData.anisotropy:1;if(undefined!==texData.format){texture.format=texData.format}if(undefined!==texData.type){texture.type=texData.type}if(undefined!==texData.mipmaps){texture.mipmaps=texData.mipmaps}if(1===texData.mipmapCount){texture.minFilter=THREE.LinearFilter}texture.needsUpdate=true;if(onLoad)onLoad(texture,texData)},onProgress,onError);return texture},setCrossOrigin:function(value){this.crossOrigin=value}};THREE.CompressedTextureLoader=function(manager){this.manager=manager!==undefined?manager:THREE.DefaultLoadingManager;this._parser=null};THREE.CompressedTextureLoader.prototype={constructor:THREE.CompressedTextureLoader,load:function(url,onLoad,onProgress,onError){var scope=this;var images=[];var texture=new THREE.CompressedTexture;texture.image=images;var loader=new THREE.XHRLoader(this.manager);loader.setCrossOrigin(this.crossOrigin);loader.setResponseType("arraybuffer");if(Array.isArray(url)){var loaded=0;var loadTexture=function(i){loader.load(url[i],function(buffer){var texDatas=scope._parser(buffer,true);images[i]={width:texDatas.width,height:texDatas.height,format:texDatas.format,mipmaps:texDatas.mipmaps};loaded+=1;if(loaded===6){if(texDatas.mipmapCount===1)texture.minFilter=THREE.LinearFilter;texture.format=texDatas.format;texture.needsUpdate=true;if(onLoad)onLoad(texture)}},onProgress,onError)};for(var i=0,il=url.length;i<il;++i){loadTexture(i)}}else{loader.load(url,function(buffer){var texDatas=scope._parser(buffer,true);if(texDatas.isCubemap){var faces=texDatas.mipmaps.length/texDatas.mipmapCount;for(var f=0;f<faces;f++){images[f]={mipmaps:[]};for(var i=0;i<texDatas.mipmapCount;i++){images[f].mipmaps.push(texDatas.mipmaps[f*texDatas.mipmapCount+i]);images[f].format=texDatas.format;images[f].width=texDatas.width;images[f].height=texDatas.height}}}else{texture.image.width=texDatas.width;texture.image.height=texDatas.height;texture.mipmaps=texDatas.mipmaps}if(texDatas.mipmapCount===1){texture.minFilter=THREE.LinearFilter}texture.format=texDatas.format;texture.needsUpdate=true;if(onLoad)onLoad(texture)},onProgress,onError)}return texture},setCrossOrigin:function(value){this.crossOrigin=value}};THREE.Material=function(){Object.defineProperty(this,"id",{value:THREE.MaterialIdCount++});this.uuid=THREE.Math.generateUUID();this.name="";this.type="Material";this.side=THREE.FrontSide;this.opacity=1;this.transparent=false;this.blending=THREE.NormalBlending;this.blendSrc=THREE.SrcAlphaFactor;this.blendDst=THREE.OneMinusSrcAlphaFactor;this.blendEquation=THREE.AddEquation;this.blendSrcAlpha=null;this.blendDstAlpha=null;this.blendEquationAlpha=null;this.depthFunc=THREE.LessEqualDepth;this.depthTest=true;this.depthWrite=true;this.colorWrite=true;this.precision=null;this.polygonOffset=false;this.polygonOffsetFactor=0;this.polygonOffsetUnits=0;this.alphaTest=0;this.overdraw=0;this.visible=true;this._needsUpdate=true};THREE.Material.prototype={constructor:THREE.Material,get needsUpdate(){return this._needsUpdate},set needsUpdate(value){if(value===true)this.update();this._needsUpdate=value},setValues:function(values){if(values===undefined)return;for(var key in values){var newValue=values[key];if(newValue===undefined){console.warn("THREE.Material: '"+key+"' parameter is undefined.");continue}var currentValue=this[key];if(currentValue===undefined){console.warn("THREE."+this.type+": '"+key+"' is not a property of this material.");continue}if(currentValue instanceof THREE.Color){currentValue.set(newValue)}else if(currentValue instanceof THREE.Vector3&&newValue instanceof THREE.Vector3){currentValue.copy(newValue)}else if(key==="overdraw"){this[key]=Number(newValue)}else{this[key]=newValue}}},toJSON:function(meta){var data={metadata:{version:4.4,type:"Material",generator:"Material.toJSON"}};data.uuid=this.uuid;data.type=this.type;if(this.name!=="")data.name=this.name;if(this.color instanceof THREE.Color)data.color=this.color.getHex();if(this.emissive instanceof THREE.Color)data.emissive=this.emissive.getHex();if(this.specular instanceof THREE.Color)data.specular=this.specular.getHex();if(this.shininess!==undefined)data.shininess=this.shininess;if(this.map instanceof THREE.Texture)data.map=this.map.toJSON(meta).uuid;if(this.alphaMap instanceof THREE.Texture)data.alphaMap=this.alphaMap.toJSON(meta).uuid;if(this.lightMap instanceof THREE.Texture)data.lightMap=this.lightMap.toJSON(meta).uuid;if(this.bumpMap instanceof THREE.Texture){data.bumpMap=this.bumpMap.toJSON(meta).uuid;data.bumpScale=this.bumpScale}if(this.normalMap instanceof THREE.Texture){data.normalMap=this.normalMap.toJSON(meta).uuid;data.normalScale=this.normalScale}if(this.displacementMap instanceof THREE.Texture){data.displacementMap=this.displacementMap.toJSON(meta).uuid;data.displacementScale=this.displacementScale;data.displacementBias=this.displacementBias}if(this.specularMap instanceof THREE.Texture)data.specularMap=this.specularMap.toJSON(meta).uuid;if(this.envMap instanceof THREE.Texture){data.envMap=this.envMap.toJSON(meta).uuid;data.reflectivity=this.reflectivity}if(this.size!==undefined)data.size=this.size;if(this.sizeAttenuation!==undefined)data.sizeAttenuation=this.sizeAttenuation;if(this.vertexColors!==undefined&&this.vertexColors!==THREE.NoColors)data.vertexColors=this.vertexColors;if(this.shading!==undefined&&this.shading!==THREE.SmoothShading)data.shading=this.shading;if(this.blending!==undefined&&this.blending!==THREE.NormalBlending)data.blending=this.blending;if(this.side!==undefined&&this.side!==THREE.FrontSide)data.side=this.side;if(this.opacity<1)data.opacity=this.opacity;if(this.transparent===true)data.transparent=this.transparent;if(this.alphaTest>0)data.alphaTest=this.alphaTest;if(this.wireframe===true)data.wireframe=this.wireframe;if(this.wireframeLinewidth>1)data.wireframeLinewidth=this.wireframeLinewidth;return data},clone:function(){return(new this.constructor).copy(this)},copy:function(source){this.name=source.name;this.side=source.side;this.opacity=source.opacity;this.transparent=source.transparent;this.blending=source.blending;this.blendSrc=source.blendSrc;this.blendDst=source.blendDst;this.blendEquation=source.blendEquation;this.blendSrcAlpha=source.blendSrcAlpha;this.blendDstAlpha=source.blendDstAlpha;this.blendEquationAlpha=source.blendEquationAlpha;this.depthFunc=source.depthFunc;this.depthTest=source.depthTest;this.depthWrite=source.depthWrite;this.precision=source.precision;this.polygonOffset=source.polygonOffset;this.polygonOffsetFactor=source.polygonOffsetFactor;this.polygonOffsetUnits=source.polygonOffsetUnits;this.alphaTest=source.alphaTest;this.overdraw=source.overdraw;this.visible=source.visible;return this},update:function(){this.dispatchEvent({type:"update"})},dispose:function(){this.dispatchEvent({type:"dispose"})},get wrapAround(){console.warn("THREE."+this.type+": .wrapAround has been removed.")},set wrapAround(boolean){console.warn("THREE."+this.type+": .wrapAround has been removed.")},get wrapRGB(){console.warn("THREE."+this.type+": .wrapRGB has been removed.");return new THREE.Color}};THREE.EventDispatcher.prototype.apply(THREE.Material.prototype);THREE.MaterialIdCount=0;THREE.LineBasicMaterial=function(parameters){THREE.Material.call(this);this.type="LineBasicMaterial";this.color=new THREE.Color(16777215);this.linewidth=1;this.linecap="round";this.linejoin="round";this.vertexColors=THREE.NoColors;this.fog=true;this.setValues(parameters)};THREE.LineBasicMaterial.prototype=Object.create(THREE.Material.prototype);THREE.LineBasicMaterial.prototype.constructor=THREE.LineBasicMaterial;THREE.LineBasicMaterial.prototype.copy=function(source){THREE.Material.prototype.copy.call(this,source);this.color.copy(source.color);this.linewidth=source.linewidth;this.linecap=source.linecap;this.linejoin=source.linejoin;this.vertexColors=source.vertexColors;this.fog=source.fog;return this};THREE.LineDashedMaterial=function(parameters){THREE.Material.call(this);this.type="LineDashedMaterial";this.color=new THREE.Color(16777215);this.linewidth=1;this.scale=1;this.dashSize=3;this.gapSize=1;this.vertexColors=false;this.fog=true;this.setValues(parameters)};THREE.LineDashedMaterial.prototype=Object.create(THREE.Material.prototype);THREE.LineDashedMaterial.prototype.constructor=THREE.LineDashedMaterial;THREE.LineDashedMaterial.prototype.copy=function(source){THREE.Material.prototype.copy.call(this,source);this.color.copy(source.color);this.linewidth=source.linewidth;this.scale=source.scale;this.dashSize=source.dashSize;this.gapSize=source.gapSize;this.vertexColors=source.vertexColors;this.fog=source.fog;return this};THREE.MeshBasicMaterial=function(parameters){THREE.Material.call(this);this.type="MeshBasicMaterial";this.color=new THREE.Color(16777215);this.map=null;this.aoMap=null;this.aoMapIntensity=1;this.specularMap=null;this.alphaMap=null;this.envMap=null;this.combine=THREE.MultiplyOperation;this.reflectivity=1;this.refractionRatio=.98;this.fog=true;this.shading=THREE.SmoothShading;this.wireframe=false;this.wireframeLinewidth=1;this.wireframeLinecap="round";this.wireframeLinejoin="round";this.vertexColors=THREE.NoColors;this.skinning=false;this.morphTargets=false;this.setValues(parameters)};THREE.MeshBasicMaterial.prototype=Object.create(THREE.Material.prototype);THREE.MeshBasicMaterial.prototype.constructor=THREE.MeshBasicMaterial;THREE.MeshBasicMaterial.prototype.copy=function(source){THREE.Material.prototype.copy.call(this,source);this.color.copy(source.color);this.map=source.map;this.aoMap=source.aoMap;this.aoMapIntensity=source.aoMapIntensity;this.specularMap=source.specularMap;this.alphaMap=source.alphaMap;this.envMap=source.envMap;this.combine=source.combine;this.reflectivity=source.reflectivity;this.refractionRatio=source.refractionRatio;this.fog=source.fog;this.shading=source.shading;this.wireframe=source.wireframe;this.wireframeLinewidth=source.wireframeLinewidth;this.wireframeLinecap=source.wireframeLinecap;this.wireframeLinejoin=source.wireframeLinejoin;this.vertexColors=source.vertexColors;this.skinning=source.skinning;this.morphTargets=source.morphTargets;return this};THREE.MeshLambertMaterial=function(parameters){THREE.Material.call(this);this.type="MeshLambertMaterial";this.color=new THREE.Color(16777215);this.emissive=new THREE.Color(0);this.map=null;this.specularMap=null;this.alphaMap=null;this.envMap=null;this.combine=THREE.MultiplyOperation;this.reflectivity=1;this.refractionRatio=.98;this.fog=true;this.wireframe=false;this.wireframeLinewidth=1;this.wireframeLinecap="round";this.wireframeLinejoin="round";this.vertexColors=THREE.NoColors;this.skinning=false;this.morphTargets=false;this.morphNormals=false;this.setValues(parameters)};THREE.MeshLambertMaterial.prototype=Object.create(THREE.Material.prototype);THREE.MeshLambertMaterial.prototype.constructor=THREE.MeshLambertMaterial;THREE.MeshLambertMaterial.prototype.copy=function(source){THREE.Material.prototype.copy.call(this,source);this.color.copy(source.color);this.emissive.copy(source.emissive);this.map=source.map;this.specularMap=source.specularMap;this.alphaMap=source.alphaMap;this.envMap=source.envMap;this.combine=source.combine;this.reflectivity=source.reflectivity;this.refractionRatio=source.refractionRatio;this.fog=source.fog;this.wireframe=source.wireframe;this.wireframeLinewidth=source.wireframeLinewidth;this.wireframeLinecap=source.wireframeLinecap;this.wireframeLinejoin=source.wireframeLinejoin;this.vertexColors=source.vertexColors;this.skinning=source.skinning;this.morphTargets=source.morphTargets;this.morphNormals=source.morphNormals;return this};THREE.MeshPhongMaterial=function(parameters){THREE.Material.call(this);this.type="MeshPhongMaterial";this.color=new THREE.Color(16777215);this.emissive=new THREE.Color(0);this.specular=new THREE.Color(1118481);this.shininess=30;this.metal=false;this.map=null;this.lightMap=null;this.lightMapIntensity=1;this.aoMap=null;this.aoMapIntensity=1;this.emissiveMap=null;this.bumpMap=null;this.bumpScale=1;this.normalMap=null;this.normalScale=new THREE.Vector2(1,1);this.displacementMap=null;this.displacementScale=1;this.displacementBias=0;this.specularMap=null;this.alphaMap=null;this.envMap=null;this.combine=THREE.MultiplyOperation;this.reflectivity=1;this.refractionRatio=.98;this.fog=true;this.shading=THREE.SmoothShading;this.wireframe=false;this.wireframeLinewidth=1;this.wireframeLinecap="round";this.wireframeLinejoin="round";this.vertexColors=THREE.NoColors;this.skinning=false;this.morphTargets=false;this.morphNormals=false;this.setValues(parameters)};THREE.MeshPhongMaterial.prototype=Object.create(THREE.Material.prototype);THREE.MeshPhongMaterial.prototype.constructor=THREE.MeshPhongMaterial;THREE.MeshPhongMaterial.prototype.copy=function(source){THREE.Material.prototype.copy.call(this,source);this.color.copy(source.color);this.emissive.copy(source.emissive);this.specular.copy(source.specular);this.shininess=source.shininess;this.metal=source.metal;this.map=source.map;this.lightMap=source.lightMap;this.lightMapIntensity=source.lightMapIntensity;this.aoMap=source.aoMap;this.aoMapIntensity=source.aoMapIntensity;this.emissiveMap=source.emissiveMap;this.bumpMap=source.bumpMap;this.bumpScale=source.bumpScale;this.normalMap=source.normalMap;this.normalScale.copy(source.normalScale);this.displacementMap=source.displacementMap;this.displacementScale=source.displacementScale;this.displacementBias=source.displacementBias;this.specularMap=source.specularMap;this.alphaMap=source.alphaMap;this.envMap=source.envMap;this.combine=source.combine;this.reflectivity=source.reflectivity;this.refractionRatio=source.refractionRatio;this.fog=source.fog;this.shading=source.shading;this.wireframe=source.wireframe;this.wireframeLinewidth=source.wireframeLinewidth;this.wireframeLinecap=source.wireframeLinecap;this.wireframeLinejoin=source.wireframeLinejoin;this.vertexColors=source.vertexColors;this.skinning=source.skinning;this.morphTargets=source.morphTargets;this.morphNormals=source.morphNormals;return this};THREE.MeshDepthMaterial=function(parameters){THREE.Material.call(this);this.type="MeshDepthMaterial";this.morphTargets=false;this.wireframe=false;this.wireframeLinewidth=1;this.setValues(parameters)};THREE.MeshDepthMaterial.prototype=Object.create(THREE.Material.prototype);THREE.MeshDepthMaterial.prototype.constructor=THREE.MeshDepthMaterial;THREE.MeshDepthMaterial.prototype.copy=function(source){THREE.Material.prototype.copy.call(this,source);this.wireframe=source.wireframe;this.wireframeLinewidth=source.wireframeLinewidth;return this};THREE.MeshNormalMaterial=function(parameters){THREE.Material.call(this,parameters);this.type="MeshNormalMaterial";this.wireframe=false;this.wireframeLinewidth=1;this.morphTargets=false;this.setValues(parameters)};THREE.MeshNormalMaterial.prototype=Object.create(THREE.Material.prototype);THREE.MeshNormalMaterial.prototype.constructor=THREE.MeshNormalMaterial;THREE.MeshNormalMaterial.prototype.copy=function(source){THREE.Material.prototype.copy.call(this,source);this.wireframe=source.wireframe;this.wireframeLinewidth=source.wireframeLinewidth;return this};THREE.MultiMaterial=function(materials){this.uuid=THREE.Math.generateUUID();this.type="MultiMaterial";this.materials=materials instanceof Array?materials:[];this.visible=true};THREE.MultiMaterial.prototype={constructor:THREE.MultiMaterial,toJSON:function(){var output={metadata:{version:4.2,type:"material",generator:"MaterialExporter"},uuid:this.uuid,type:this.type,materials:[]};for(var i=0,l=this.materials.length;i<l;i++){output.materials.push(this.materials[i].toJSON())}output.visible=this.visible;return output},clone:function(){var material=new this.constructor;for(var i=0;i<this.materials.length;i++){material.materials.push(this.materials[i].clone())}material.visible=this.visible;return material}};THREE.MeshFaceMaterial=THREE.MultiMaterial;THREE.PointsMaterial=function(parameters){THREE.Material.call(this);this.type="PointsMaterial";this.color=new THREE.Color(16777215);this.map=null;this.size=1;this.sizeAttenuation=true;this.vertexColors=THREE.NoColors;this.fog=true;this.setValues(parameters)};THREE.PointsMaterial.prototype=Object.create(THREE.Material.prototype);THREE.PointsMaterial.prototype.constructor=THREE.PointsMaterial;THREE.PointsMaterial.prototype.copy=function(source){THREE.Material.prototype.copy.call(this,source);this.color.copy(source.color);this.map=source.map;this.size=source.size;this.sizeAttenuation=source.sizeAttenuation;this.vertexColors=source.vertexColors;this.fog=source.fog;return this};THREE.PointCloudMaterial=function(parameters){console.warn("THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial.");return new THREE.PointsMaterial(parameters)};THREE.ParticleBasicMaterial=function(parameters){console.warn("THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial.");return new THREE.PointsMaterial(parameters)};THREE.ParticleSystemMaterial=function(parameters){console.warn("THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial.");return new THREE.PointsMaterial(parameters)};THREE.ShaderMaterial=function(parameters){THREE.Material.call(this);this.type="ShaderMaterial";this.defines={};this.uniforms={};this.vertexShader="void main() {\n	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}";this.fragmentShader="void main() {\n	gl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}";this.shading=THREE.SmoothShading;this.linewidth=1;this.wireframe=false;this.wireframeLinewidth=1;this.fog=false;this.lights=false;this.vertexColors=THREE.NoColors;this.skinning=false;this.morphTargets=false;this.morphNormals=false;this.derivatives=false;this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv2:[0,0]};this.index0AttributeName=undefined;if(parameters!==undefined){if(parameters.attributes!==undefined){console.error("THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.")}this.setValues(parameters)}};THREE.ShaderMaterial.prototype=Object.create(THREE.Material.prototype);THREE.ShaderMaterial.prototype.constructor=THREE.ShaderMaterial;THREE.ShaderMaterial.prototype.copy=function(source){THREE.Material.prototype.copy.call(this,source);this.fragmentShader=source.fragmentShader;this.vertexShader=source.vertexShader;this.uniforms=THREE.UniformsUtils.clone(source.uniforms);this.attributes=source.attributes;this.defines=source.defines;this.shading=source.shading;this.wireframe=source.wireframe;this.wireframeLinewidth=source.wireframeLinewidth;this.fog=source.fog;this.lights=source.lights;this.vertexColors=source.vertexColors;this.skinning=source.skinning;this.morphTargets=source.morphTargets;this.morphNormals=source.morphNormals;this.derivatives=source.derivatives;return this};THREE.ShaderMaterial.prototype.toJSON=function(meta){var data=THREE.Material.prototype.toJSON.call(this,meta);data.uniforms=this.uniforms;data.attributes=this.attributes;data.vertexShader=this.vertexShader;data.fragmentShader=this.fragmentShader;return data};THREE.RawShaderMaterial=function(parameters){THREE.ShaderMaterial.call(this,parameters);this.type="RawShaderMaterial"};THREE.RawShaderMaterial.prototype=Object.create(THREE.ShaderMaterial.prototype);THREE.RawShaderMaterial.prototype.constructor=THREE.RawShaderMaterial;THREE.SpriteMaterial=function(parameters){THREE.Material.call(this);this.type="SpriteMaterial";this.color=new THREE.Color(16777215);this.map=null;this.rotation=0;this.fog=false;this.setValues(parameters)};THREE.SpriteMaterial.prototype=Object.create(THREE.Material.prototype);THREE.SpriteMaterial.prototype.constructor=THREE.SpriteMaterial;THREE.SpriteMaterial.prototype.copy=function(source){THREE.Material.prototype.copy.call(this,source);this.color.copy(source.color);this.map=source.map;this.rotation=source.rotation;this.fog=source.fog;return this};THREE.Texture=function(image,mapping,wrapS,wrapT,magFilter,minFilter,format,type,anisotropy){Object.defineProperty(this,"id",{value:THREE.TextureIdCount++});this.uuid=THREE.Math.generateUUID();this.name="";this.sourceFile="";this.image=image!==undefined?image:THREE.Texture.DEFAULT_IMAGE;this.mipmaps=[];this.mapping=mapping!==undefined?mapping:THREE.Texture.DEFAULT_MAPPING;this.wrapS=wrapS!==undefined?wrapS:THREE.ClampToEdgeWrapping;this.wrapT=wrapT!==undefined?wrapT:THREE.ClampToEdgeWrapping;this.magFilter=magFilter!==undefined?magFilter:THREE.LinearFilter;this.minFilter=minFilter!==undefined?minFilter:THREE.LinearMipMapLinearFilter;this.anisotropy=anisotropy!==undefined?anisotropy:1;this.format=format!==undefined?format:THREE.RGBAFormat;this.type=type!==undefined?type:THREE.UnsignedByteType;this.offset=new THREE.Vector2(0,0);this.repeat=new THREE.Vector2(1,1);this.generateMipmaps=true;this.premultiplyAlpha=false;this.flipY=true;this.unpackAlignment=4;this.version=0;this.onUpdate=null};THREE.Texture.DEFAULT_IMAGE=undefined;THREE.Texture.DEFAULT_MAPPING=THREE.UVMapping;THREE.Texture.prototype={constructor:THREE.Texture,set needsUpdate(value){if(value===true)this.version++},clone:function(){return(new this.constructor).copy(this)},copy:function(source){this.image=source.image;this.mipmaps=source.mipmaps.slice(0);this.mapping=source.mapping;this.wrapS=source.wrapS;this.wrapT=source.wrapT;this.magFilter=source.magFilter;this.minFilter=source.minFilter;this.anisotropy=source.anisotropy;this.format=source.format;this.type=source.type;this.offset.copy(source.offset);this.repeat.copy(source.repeat);this.generateMipmaps=source.generateMipmaps;this.premultiplyAlpha=source.premultiplyAlpha;this.flipY=source.flipY;this.unpackAlignment=source.unpackAlignment;return this},toJSON:function(meta){if(meta.textures[this.uuid]!==undefined){return meta.textures[this.uuid]}function getDataURL(image){var canvas;if(image.toDataURL!==undefined){canvas=image}else{canvas=document.createElement("canvas");canvas.width=image.width;canvas.height=image.height;canvas.getContext("2d").drawImage(image,0,0,image.width,image.height)}if(canvas.width>2048||canvas.height>2048){return canvas.toDataURL("image/jpeg",.6)}else{return canvas.toDataURL("image/png")}}var output={metadata:{version:4.4,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,mapping:this.mapping,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],wrap:[this.wrapS,this.wrapT],minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy};if(this.image!==undefined){var image=this.image;if(image.uuid===undefined){image.uuid=THREE.Math.generateUUID()}if(meta.images[image.uuid]===undefined){meta.images[image.uuid]={uuid:image.uuid,url:getDataURL(image)}}output.image=image.uuid}meta.textures[this.uuid]=output;return output},dispose:function(){this.dispatchEvent({type:"dispose"})},transformUv:function(uv){if(this.mapping!==THREE.UVMapping)return;uv.multiply(this.repeat);uv.add(this.offset);if(uv.x<0||uv.x>1){switch(this.wrapS){case THREE.RepeatWrapping:uv.x=uv.x-Math.floor(uv.x);break;case THREE.ClampToEdgeWrapping:uv.x=uv.x<0?0:1;break;case THREE.MirroredRepeatWrapping:if(Math.abs(Math.floor(uv.x)%2)===1){uv.x=Math.ceil(uv.x)-uv.x}else{uv.x=uv.x-Math.floor(uv.x)}break}}if(uv.y<0||uv.y>1){switch(this.wrapT){case THREE.RepeatWrapping:uv.y=uv.y-Math.floor(uv.y);break;case THREE.ClampToEdgeWrapping:uv.y=uv.y<0?0:1;break;case THREE.MirroredRepeatWrapping:if(Math.abs(Math.floor(uv.y)%2)===1){uv.y=Math.ceil(uv.y)-uv.y}else{uv.y=uv.y-Math.floor(uv.y)}break}}if(this.flipY){uv.y=1-uv.y}}};THREE.EventDispatcher.prototype.apply(THREE.Texture.prototype);THREE.TextureIdCount=0;THREE.CanvasTexture=function(canvas,mapping,wrapS,wrapT,magFilter,minFilter,format,type,anisotropy){THREE.Texture.call(this,canvas,mapping,wrapS,wrapT,magFilter,minFilter,format,type,anisotropy);this.needsUpdate=true};THREE.CanvasTexture.prototype=Object.create(THREE.Texture.prototype);THREE.CanvasTexture.prototype.constructor=THREE.CanvasTexture;THREE.CubeTexture=function(images,mapping,wrapS,wrapT,magFilter,minFilter,format,type,anisotropy){mapping=mapping!==undefined?mapping:THREE.CubeReflectionMapping;THREE.Texture.call(this,images,mapping,wrapS,wrapT,magFilter,minFilter,format,type,anisotropy);this.images=images;this.flipY=false};THREE.CubeTexture.prototype=Object.create(THREE.Texture.prototype);THREE.CubeTexture.prototype.constructor=THREE.CubeTexture;THREE.CubeTexture.prototype.copy=function(source){THREE.Texture.prototype.copy.call(this,source);this.images=source.images;return this};THREE.CompressedTexture=function(mipmaps,width,height,format,type,mapping,wrapS,wrapT,magFilter,minFilter,anisotropy){THREE.Texture.call(this,null,mapping,wrapS,wrapT,magFilter,minFilter,format,type,anisotropy);this.image={width:width,height:height};this.mipmaps=mipmaps;this.flipY=false;this.generateMipmaps=false};THREE.CompressedTexture.prototype=Object.create(THREE.Texture.prototype);THREE.CompressedTexture.prototype.constructor=THREE.CompressedTexture;THREE.DataTexture=function(data,width,height,format,type,mapping,wrapS,wrapT,magFilter,minFilter,anisotropy){THREE.Texture.call(this,null,mapping,wrapS,wrapT,magFilter,minFilter,format,type,anisotropy);this.image={data:data,width:width,height:height};this.magFilter=magFilter!==undefined?magFilter:THREE.NearestFilter;this.minFilter=minFilter!==undefined?minFilter:THREE.NearestFilter;this.flipY=false;this.generateMipmaps=false};THREE.DataTexture.prototype=Object.create(THREE.Texture.prototype);THREE.DataTexture.prototype.constructor=THREE.DataTexture;THREE.VideoTexture=function(video,mapping,wrapS,wrapT,magFilter,minFilter,format,type,anisotropy){THREE.Texture.call(this,video,mapping,wrapS,wrapT,magFilter,minFilter,format,type,anisotropy);this.generateMipmaps=false;var scope=this;function update(){requestAnimationFrame(update);if(video.readyState===video.HAVE_ENOUGH_DATA){scope.needsUpdate=true}}update()};THREE.VideoTexture.prototype=Object.create(THREE.Texture.prototype);THREE.VideoTexture.prototype.constructor=THREE.VideoTexture;THREE.Group=function(){THREE.Object3D.call(this);this.type="Group"};THREE.Group.prototype=Object.create(THREE.Object3D.prototype);THREE.Group.prototype.constructor=THREE.Group;THREE.Points=function(geometry,material){THREE.Object3D.call(this);this.type="Points";this.geometry=geometry!==undefined?geometry:new THREE.Geometry;this.material=material!==undefined?material:new THREE.PointsMaterial({color:Math.random()*16777215})};THREE.Points.prototype=Object.create(THREE.Object3D.prototype);THREE.Points.prototype.constructor=THREE.Points;THREE.Points.prototype.raycast=function(){var inverseMatrix=new THREE.Matrix4;var ray=new THREE.Ray;return function raycast(raycaster,intersects){var object=this;var geometry=object.geometry;var threshold=raycaster.params.Points.threshold;inverseMatrix.getInverse(this.matrixWorld);ray.copy(raycaster.ray).applyMatrix4(inverseMatrix);if(geometry.boundingBox!==null){if(ray.isIntersectionBox(geometry.boundingBox)===false){return}}var localThreshold=threshold/((this.scale.x+this.scale.y+this.scale.z)/3);var localThresholdSq=localThreshold*localThreshold;var position=new THREE.Vector3;function testPoint(point,index){var rayPointDistanceSq=ray.distanceSqToPoint(point);if(rayPointDistanceSq<localThresholdSq){var intersectPoint=ray.closestPointToPoint(point);intersectPoint.applyMatrix4(object.matrixWorld);var distance=raycaster.ray.origin.distanceTo(intersectPoint);if(distance<raycaster.near||distance>raycaster.far)return;intersects.push({distance:distance,distanceToRay:Math.sqrt(rayPointDistanceSq),point:intersectPoint.clone(),index:index,face:null,object:object})}}if(geometry instanceof THREE.BufferGeometry){var index=geometry.index;var attributes=geometry.attributes;var positions=attributes.position.array;if(index!==null){var indices=index.array;for(var i=0,il=indices.length;i<il;i++){var a=indices[i];position.fromArray(positions,a*3);testPoint(position,a)}}else{for(var i=0,l=positions.length/3;i<l;i++){position.fromArray(positions,i*3);testPoint(position,i)}}}else{var vertices=geometry.vertices;for(var i=0,l=vertices.length;i<l;i++){testPoint(vertices[i],i)}}}}();THREE.Points.prototype.clone=function(){return new this.constructor(this.geometry,this.material).copy(this)};THREE.PointCloud=function(geometry,material){console.warn("THREE.PointCloud has been renamed to THREE.Points.");return new THREE.Points(geometry,material)};THREE.ParticleSystem=function(geometry,material){console.warn("THREE.ParticleSystem has been renamed to THREE.Points.");return new THREE.Points(geometry,material)};THREE.Line=function(geometry,material,mode){if(mode===1){console.warn("THREE.Line: parameter THREE.LinePieces no longer supported. Created THREE.LineSegments instead.");return new THREE.LineSegments(geometry,material)}THREE.Object3D.call(this);this.type="Line";this.geometry=geometry!==undefined?geometry:new THREE.Geometry;this.material=material!==undefined?material:new THREE.LineBasicMaterial({color:Math.random()*16777215})};THREE.Line.prototype=Object.create(THREE.Object3D.prototype);THREE.Line.prototype.constructor=THREE.Line;THREE.Line.prototype.raycast=function(){var inverseMatrix=new THREE.Matrix4;var ray=new THREE.Ray;var sphere=new THREE.Sphere;return function raycast(raycaster,intersects){var precision=raycaster.linePrecision;var precisionSq=precision*precision;var geometry=this.geometry;if(geometry.boundingSphere===null)geometry.computeBoundingSphere();sphere.copy(geometry.boundingSphere);sphere.applyMatrix4(this.matrixWorld);if(raycaster.ray.isIntersectionSphere(sphere)===false){return}inverseMatrix.getInverse(this.matrixWorld);ray.copy(raycaster.ray).applyMatrix4(inverseMatrix);var vStart=new THREE.Vector3;var vEnd=new THREE.Vector3;var interSegment=new THREE.Vector3;var interRay=new THREE.Vector3;

            var step=this instanceof THREE.LineSegments?2:1;if(geometry instanceof THREE.BufferGeometry){var index=geometry.index;var attributes=geometry.attributes;if(index!==null){var indices=index.array;var positions=attributes.position.array;for(var i=0,l=indices.length-1;i<l;i+=step){var a=indices[i];var b=indices[i+1];vStart.fromArray(positions,a*3);vEnd.fromArray(positions,b*3);var distSq=ray.distanceSqToSegment(vStart,vEnd,interRay,interSegment);if(distSq>precisionSq)continue;interRay.applyMatrix4(this.matrixWorld);var distance=raycaster.ray.origin.distanceTo(interRay);if(distance<raycaster.near||distance>raycaster.far)continue;intersects.push({distance:distance,point:interSegment.clone().applyMatrix4(this.matrixWorld),index:i,face:null,faceIndex:null,object:this})}}else{var positions=attributes.position.array;for(var i=0,l=positions.length/3-1;i<l;i+=step){vStart.fromArray(positions,3*i);vEnd.fromArray(positions,3*i+3);var distSq=ray.distanceSqToSegment(vStart,vEnd,interRay,interSegment);if(distSq>precisionSq)continue;interRay.applyMatrix4(this.matrixWorld);var distance=raycaster.ray.origin.distanceTo(interRay);if(distance<raycaster.near||distance>raycaster.far)continue;intersects.push({distance:distance,point:interSegment.clone().applyMatrix4(this.matrixWorld),index:i,face:null,faceIndex:null,object:this})}}}else if(geometry instanceof THREE.Geometry){var vertices=geometry.vertices;var nbVertices=vertices.length;for(var i=0;i<nbVertices-1;i+=step){var distSq=ray.distanceSqToSegment(vertices[i],vertices[i+1],interRay,interSegment);if(distSq>precisionSq)continue;interRay.applyMatrix4(this.matrixWorld);var distance=raycaster.ray.origin.distanceTo(interRay);if(distance<raycaster.near||distance>raycaster.far)continue;intersects.push({distance:distance,point:interSegment.clone().applyMatrix4(this.matrixWorld),index:i,face:null,faceIndex:null,object:this})}}}}();THREE.Line.prototype.clone=function(){return new this.constructor(this.geometry,this.material).copy(this)};THREE.LineStrip=0;THREE.LinePieces=1;THREE.LineSegments=function(geometry,material){THREE.Line.call(this,geometry,material);this.type="LineSegments"};THREE.LineSegments.prototype=Object.create(THREE.Line.prototype);THREE.LineSegments.prototype.constructor=THREE.LineSegments;THREE.Mesh=function(geometry,material){THREE.Object3D.call(this);this.type="Mesh";this.geometry=geometry!==undefined?geometry:new THREE.Geometry;this.material=material!==undefined?material:new THREE.MeshBasicMaterial({color:Math.random()*16777215});this.updateMorphTargets()};THREE.Mesh.prototype=Object.create(THREE.Object3D.prototype);THREE.Mesh.prototype.constructor=THREE.Mesh;THREE.Mesh.prototype.updateMorphTargets=function(){if(this.geometry.morphTargets!==undefined&&this.geometry.morphTargets.length>0){this.morphTargetBase=-1;this.morphTargetInfluences=[];this.morphTargetDictionary={};for(var m=0,ml=this.geometry.morphTargets.length;m<ml;m++){this.morphTargetInfluences.push(0);this.morphTargetDictionary[this.geometry.morphTargets[m].name]=m}}};THREE.Mesh.prototype.getMorphTargetIndexByName=function(name){if(this.morphTargetDictionary[name]!==undefined){return this.morphTargetDictionary[name]}console.warn("THREE.Mesh.getMorphTargetIndexByName: morph target "+name+" does not exist. Returning 0.");return 0};THREE.Mesh.prototype.raycast=function(){var inverseMatrix=new THREE.Matrix4;var ray=new THREE.Ray;var sphere=new THREE.Sphere;var vA=new THREE.Vector3;var vB=new THREE.Vector3;var vC=new THREE.Vector3;var tempA=new THREE.Vector3;var tempB=new THREE.Vector3;var tempC=new THREE.Vector3;var uvA=new THREE.Vector2;var uvB=new THREE.Vector2;var uvC=new THREE.Vector2;var barycoord=new THREE.Vector3;var intersectionPoint=new THREE.Vector3;var intersectionPointWorld=new THREE.Vector3;function uvIntersection(point,p1,p2,p3,uv1,uv2,uv3){THREE.Triangle.barycoordFromPoint(point,p1,p2,p3,barycoord);uv1.multiplyScalar(barycoord.x);uv2.multiplyScalar(barycoord.y);uv3.multiplyScalar(barycoord.z);uv1.add(uv2).add(uv3);return uv1.clone()}function checkIntersection(object,raycaster,ray,pA,pB,pC,point){var intersect;var material=object.material;if(material.side===THREE.BackSide){intersect=ray.intersectTriangle(pC,pB,pA,true,point)}else{intersect=ray.intersectTriangle(pA,pB,pC,material.side!==THREE.DoubleSide,point)}if(intersect===null)return null;intersectionPointWorld.copy(point);intersectionPointWorld.applyMatrix4(object.matrixWorld);var distance=raycaster.ray.origin.distanceTo(intersectionPointWorld);if(distance<raycaster.near||distance>raycaster.far)return null;return{distance:distance,point:intersectionPointWorld.clone(),object:object}}function checkBufferGeometryIntersection(object,raycaster,ray,positions,uvs,a,b,c){vA.fromArray(positions,a*3);vB.fromArray(positions,b*3);vC.fromArray(positions,c*3);var intersection=checkIntersection(object,raycaster,ray,vA,vB,vC,intersectionPoint);if(intersection){if(uvs){uvA.fromArray(uvs,a*2);uvB.fromArray(uvs,b*2);uvC.fromArray(uvs,c*2);intersection.uv=uvIntersection(intersectionPoint,vA,vB,vC,uvA,uvB,uvC)}intersection.face=new THREE.Face3(a,b,c,THREE.Triangle.normal(vA,vB,vC));intersection.faceIndex=a}return intersection}return function raycast(raycaster,intersects){var geometry=this.geometry;var material=this.material;if(material===undefined)return;if(geometry.boundingSphere===null)geometry.computeBoundingSphere();var matrixWorld=this.matrixWorld;sphere.copy(geometry.boundingSphere);sphere.applyMatrix4(matrixWorld);if(raycaster.ray.isIntersectionSphere(sphere)===false)return;inverseMatrix.getInverse(matrixWorld);ray.copy(raycaster.ray).applyMatrix4(inverseMatrix);if(geometry.boundingBox!==null){if(ray.isIntersectionBox(geometry.boundingBox)===false)return}var uvs,intersection;if(geometry instanceof THREE.BufferGeometry){var a,b,c;var index=geometry.index;var attributes=geometry.attributes;var positions=attributes.position.array;if(attributes.uv!==undefined){uvs=attributes.uv.array}if(index!==null){var indices=index.array;for(var i=0,l=indices.length;i<l;i+=3){a=indices[i];b=indices[i+1];c=indices[i+2];intersection=checkBufferGeometryIntersection(this,raycaster,ray,positions,uvs,a,b,c);if(intersection){intersection.faceIndex=Math.floor(i/3);intersects.push(intersection)}}}else{for(var i=0,l=positions.length;i<l;i+=9){a=i/3;b=a+1;c=a+2;intersection=checkBufferGeometryIntersection(this,raycaster,ray,positions,uvs,a,b,c);if(intersection){intersection.index=a;intersects.push(intersection)}}}}else if(geometry instanceof THREE.Geometry){var fvA,fvB,fvC;var isFaceMaterial=material instanceof THREE.MeshFaceMaterial;var materials=isFaceMaterial===true?material.materials:null;var vertices=geometry.vertices;var faces=geometry.faces;var faceVertexUvs=geometry.faceVertexUvs[0];if(faceVertexUvs.length>0)uvs=faceVertexUvs;for(var f=0,fl=faces.length;f<fl;f++){var face=faces[f];var faceMaterial=isFaceMaterial===true?materials[face.materialIndex]:material;if(faceMaterial===undefined)continue;fvA=vertices[face.a];fvB=vertices[face.b];fvC=vertices[face.c];if(faceMaterial.morphTargets===true){var morphTargets=geometry.morphTargets;var morphInfluences=this.morphTargetInfluences;vA.set(0,0,0);vB.set(0,0,0);vC.set(0,0,0);for(var t=0,tl=morphTargets.length;t<tl;t++){var influence=morphInfluences[t];if(influence===0)continue;var targets=morphTargets[t].vertices;vA.addScaledVector(tempA.subVectors(targets[face.a],fvA),influence);vB.addScaledVector(tempB.subVectors(targets[face.b],fvB),influence);vC.addScaledVector(tempC.subVectors(targets[face.c],fvC),influence)}vA.add(fvA);vB.add(fvB);vC.add(fvC);fvA=vA;fvB=vB;fvC=vC}intersection=checkIntersection(this,raycaster,ray,fvA,fvB,fvC,intersectionPoint);if(intersection){if(uvs){var uvs_f=uvs[f];uvA.copy(uvs_f[0]);uvB.copy(uvs_f[1]);uvC.copy(uvs_f[2]);intersection.uv=uvIntersection(intersectionPoint,fvA,fvB,fvC,uvA,uvB,uvC)}intersection.face=face;intersection.faceIndex=f;intersects.push(intersection)}}}}}();THREE.Mesh.prototype.clone=function(){return new this.constructor(this.geometry,this.material).copy(this)};THREE.Bone=function(skin){THREE.Object3D.call(this);this.type="Bone";this.skin=skin};THREE.Bone.prototype=Object.create(THREE.Object3D.prototype);THREE.Bone.prototype.constructor=THREE.Bone;THREE.Bone.prototype.copy=function(source){THREE.Object3D.prototype.copy.call(this,source);this.skin=source.skin;return this};THREE.Skeleton=function(bones,boneInverses,useVertexTexture){this.useVertexTexture=useVertexTexture!==undefined?useVertexTexture:true;this.identityMatrix=new THREE.Matrix4;bones=bones||[];this.bones=bones.slice(0);if(this.useVertexTexture){var size=Math.sqrt(this.bones.length*4);size=THREE.Math.nextPowerOfTwo(Math.ceil(size));size=Math.max(size,4);this.boneTextureWidth=size;this.boneTextureHeight=size;this.boneMatrices=new Float32Array(this.boneTextureWidth*this.boneTextureHeight*4);this.boneTexture=new THREE.DataTexture(this.boneMatrices,this.boneTextureWidth,this.boneTextureHeight,THREE.RGBAFormat,THREE.FloatType)}else{this.boneMatrices=new Float32Array(16*this.bones.length)}if(boneInverses===undefined){this.calculateInverses()}else{if(this.bones.length===boneInverses.length){this.boneInverses=boneInverses.slice(0)}else{console.warn("THREE.Skeleton bonInverses is the wrong length.");this.boneInverses=[];for(var b=0,bl=this.bones.length;b<bl;b++){this.boneInverses.push(new THREE.Matrix4)}}}};THREE.Skeleton.prototype.calculateInverses=function(){this.boneInverses=[];for(var b=0,bl=this.bones.length;b<bl;b++){var inverse=new THREE.Matrix4;if(this.bones[b]){inverse.getInverse(this.bones[b].matrixWorld)}this.boneInverses.push(inverse)}};THREE.Skeleton.prototype.pose=function(){var bone;for(var b=0,bl=this.bones.length;b<bl;b++){bone=this.bones[b];if(bone){bone.matrixWorld.getInverse(this.boneInverses[b])}}for(var b=0,bl=this.bones.length;b<bl;b++){bone=this.bones[b];if(bone){if(bone.parent){bone.matrix.getInverse(bone.parent.matrixWorld);bone.matrix.multiply(bone.matrixWorld)}else{bone.matrix.copy(bone.matrixWorld)}bone.matrix.decompose(bone.position,bone.quaternion,bone.scale)}}};THREE.Skeleton.prototype.update=function(){var offsetMatrix=new THREE.Matrix4;return function update(){for(var b=0,bl=this.bones.length;b<bl;b++){var matrix=this.bones[b]?this.bones[b].matrixWorld:this.identityMatrix;offsetMatrix.multiplyMatrices(matrix,this.boneInverses[b]);offsetMatrix.flattenToArrayOffset(this.boneMatrices,b*16)}if(this.useVertexTexture){this.boneTexture.needsUpdate=true}}}();THREE.Skeleton.prototype.clone=function(){return new THREE.Skeleton(this.bones,this.boneInverses,this.useVertexTexture)};THREE.SkinnedMesh=function(geometry,material,useVertexTexture){THREE.Mesh.call(this,geometry,material);this.type="SkinnedMesh";this.bindMode="attached";this.bindMatrix=new THREE.Matrix4;this.bindMatrixInverse=new THREE.Matrix4;var bones=[];if(this.geometry&&this.geometry.bones!==undefined){var bone,gbone;for(var b=0,bl=this.geometry.bones.length;b<bl;++b){gbone=this.geometry.bones[b];bone=new THREE.Bone(this);bones.push(bone);bone.name=gbone.name;bone.position.fromArray(gbone.pos);bone.quaternion.fromArray(gbone.rotq);if(gbone.scl!==undefined)bone.scale.fromArray(gbone.scl)}for(var b=0,bl=this.geometry.bones.length;b<bl;++b){gbone=this.geometry.bones[b];if(gbone.parent!==-1&&gbone.parent!==null){bones[gbone.parent].add(bones[b])}else{this.add(bones[b])}}}this.normalizeSkinWeights();this.updateMatrixWorld(true);this.bind(new THREE.Skeleton(bones,undefined,useVertexTexture),this.matrixWorld)};THREE.SkinnedMesh.prototype=Object.create(THREE.Mesh.prototype);THREE.SkinnedMesh.prototype.constructor=THREE.SkinnedMesh;THREE.SkinnedMesh.prototype.bind=function(skeleton,bindMatrix){this.skeleton=skeleton;if(bindMatrix===undefined){this.updateMatrixWorld(true);this.skeleton.calculateInverses();bindMatrix=this.matrixWorld}this.bindMatrix.copy(bindMatrix);this.bindMatrixInverse.getInverse(bindMatrix)};THREE.SkinnedMesh.prototype.pose=function(){this.skeleton.pose()};THREE.SkinnedMesh.prototype.normalizeSkinWeights=function(){if(this.geometry instanceof THREE.Geometry){for(var i=0;i<this.geometry.skinIndices.length;i++){var sw=this.geometry.skinWeights[i];var scale=1/sw.lengthManhattan();if(scale!==Infinity){sw.multiplyScalar(scale)}else{sw.set(1)}}}else{}};THREE.SkinnedMesh.prototype.updateMatrixWorld=function(force){THREE.Mesh.prototype.updateMatrixWorld.call(this,true);if(this.bindMode==="attached"){this.bindMatrixInverse.getInverse(this.matrixWorld)}else if(this.bindMode==="detached"){this.bindMatrixInverse.getInverse(this.bindMatrix)}else{console.warn("THREE.SkinnedMesh unrecognized bindMode: "+this.bindMode)}};THREE.SkinnedMesh.prototype.clone=function(){return new this.constructor(this.geometry,this.material,this.useVertexTexture).copy(this)};THREE.LOD=function(){THREE.Object3D.call(this);this.type="LOD";Object.defineProperties(this,{levels:{enumerable:true,value:[]},objects:{get:function(){console.warn("THREE.LOD: .objects has been renamed to .levels.");return this.levels}}})};THREE.LOD.prototype=Object.create(THREE.Object3D.prototype);THREE.LOD.prototype.constructor=THREE.LOD;THREE.LOD.prototype.addLevel=function(object,distance){if(distance===undefined)distance=0;distance=Math.abs(distance);var levels=this.levels;for(var l=0;l<levels.length;l++){if(distance<levels[l].distance){break}}levels.splice(l,0,{distance:distance,object:object});this.add(object)};THREE.LOD.prototype.getObjectForDistance=function(distance){var levels=this.levels;for(var i=1,l=levels.length;i<l;i++){if(distance<levels[i].distance){break}}return levels[i-1].object};THREE.LOD.prototype.raycast=function(){var matrixPosition=new THREE.Vector3;return function raycast(raycaster,intersects){matrixPosition.setFromMatrixPosition(this.matrixWorld);var distance=raycaster.ray.origin.distanceTo(matrixPosition);this.getObjectForDistance(distance).raycast(raycaster,intersects)}}();THREE.LOD.prototype.update=function(){var v1=new THREE.Vector3;var v2=new THREE.Vector3;return function update(camera){var levels=this.levels;if(levels.length>1){v1.setFromMatrixPosition(camera.matrixWorld);v2.setFromMatrixPosition(this.matrixWorld);var distance=v1.distanceTo(v2);levels[0].object.visible=true;for(var i=1,l=levels.length;i<l;i++){if(distance>=levels[i].distance){levels[i-1].object.visible=false;levels[i].object.visible=true}else{break}}for(;i<l;i++){levels[i].object.visible=false}}}}();THREE.LOD.prototype.copy=function(source){THREE.Object3D.prototype.copy.call(this,source,false);var levels=source.levels;for(var i=0,l=levels.length;i<l;i++){var level=levels[i];this.addLevel(level.object.clone(),level.distance)}return this};THREE.LOD.prototype.toJSON=function(meta){var data=THREE.Object3D.prototype.toJSON.call(this,meta);data.object.levels=[];var levels=this.levels;for(var i=0,l=levels.length;i<l;i++){var level=levels[i];data.object.levels.push({object:level.object.uuid,distance:level.distance})}return data};THREE.Sprite=function(){var indices=new Uint16Array([0,1,2,0,2,3]);var vertices=new Float32Array([-.5,-.5,0,.5,-.5,0,.5,.5,0,-.5,.5,0]);var uvs=new Float32Array([0,0,1,0,1,1,0,1]);var geometry=new THREE.BufferGeometry;geometry.setIndex(new THREE.BufferAttribute(indices,1));geometry.addAttribute("position",new THREE.BufferAttribute(vertices,3));geometry.addAttribute("uv",new THREE.BufferAttribute(uvs,2));return function Sprite(material){THREE.Object3D.call(this);this.type="Sprite";this.geometry=geometry;this.material=material!==undefined?material:new THREE.SpriteMaterial}}();THREE.Sprite.prototype=Object.create(THREE.Object3D.prototype);THREE.Sprite.prototype.constructor=THREE.Sprite;THREE.Sprite.prototype.raycast=function(){var matrixPosition=new THREE.Vector3;return function raycast(raycaster,intersects){matrixPosition.setFromMatrixPosition(this.matrixWorld);var distanceSq=raycaster.ray.distanceSqToPoint(matrixPosition);var guessSizeSq=this.scale.x*this.scale.y;if(distanceSq>guessSizeSq){return}intersects.push({distance:Math.sqrt(distanceSq),point:this.position,face:null,object:this})}}();THREE.Sprite.prototype.clone=function(){return new this.constructor(this.material).copy(this)};THREE.Particle=THREE.Sprite;THREE.LensFlare=function(texture,size,distance,blending,color){THREE.Object3D.call(this);this.lensFlares=[];this.positionScreen=new THREE.Vector3;this.customUpdateCallback=undefined;if(texture!==undefined){this.add(texture,size,distance,blending,color)}};THREE.LensFlare.prototype=Object.create(THREE.Object3D.prototype);THREE.LensFlare.prototype.constructor=THREE.LensFlare;THREE.LensFlare.prototype.add=function(texture,size,distance,blending,color,opacity){if(size===undefined)size=-1;if(distance===undefined)distance=0;if(opacity===undefined)opacity=1;if(color===undefined)color=new THREE.Color(16777215);if(blending===undefined)blending=THREE.NormalBlending;distance=Math.min(distance,Math.max(0,distance));this.lensFlares.push({texture:texture,size:size,distance:distance,x:0,y:0,z:0,scale:1,rotation:0,opacity:opacity,color:color,blending:blending})};THREE.LensFlare.prototype.updateLensFlares=function(){var f,fl=this.lensFlares.length;var flare;var vecX=-this.positionScreen.x*2;var vecY=-this.positionScreen.y*2;for(f=0;f<fl;f++){flare=this.lensFlares[f];flare.x=this.positionScreen.x+vecX*flare.distance;flare.y=this.positionScreen.y+vecY*flare.distance;flare.wantedRotation=flare.x*Math.PI*.25;flare.rotation+=(flare.wantedRotation-flare.rotation)*.25}};THREE.LensFlare.prototype.copy=function(source){THREE.Object3D.prototype.copy.call(this,source);this.positionScreen.copy(source.positionScreen);this.customUpdateCallback=source.customUpdateCallback;for(var i=0,l=source.lensFlares.length;i<l;i++){this.lensFlares.push(source.lensFlares[i])}return this};THREE.Scene=function(){THREE.Object3D.call(this);this.type="Scene";this.fog=null;this.overrideMaterial=null;this.autoUpdate=true};THREE.Scene.prototype=Object.create(THREE.Object3D.prototype);THREE.Scene.prototype.constructor=THREE.Scene;THREE.Scene.prototype.copy=function(source){THREE.Object3D.prototype.copy.call(this,source);if(source.fog!==null)this.fog=source.fog.clone();if(source.overrideMaterial!==null)this.overrideMaterial=source.overrideMaterial.clone();this.autoUpdate=source.autoUpdate;this.matrixAutoUpdate=source.matrixAutoUpdate;return this};THREE.Fog=function(color,near,far){this.name="";this.color=new THREE.Color(color);this.near=near!==undefined?near:1;this.far=far!==undefined?far:1e3};THREE.Fog.prototype.clone=function(){return new THREE.Fog(this.color.getHex(),this.near,this.far)};THREE.FogExp2=function(color,density){this.name="";this.color=new THREE.Color(color);this.density=density!==undefined?density:25e-5};THREE.FogExp2.prototype.clone=function(){return new THREE.FogExp2(this.color.getHex(),this.density)};THREE.ShaderChunk={};THREE.ShaderChunk["alphamap_fragment"]="#ifdef USE_ALPHAMAP\n\n	diffuseColor.a *= texture2D( alphaMap, vUv ).g;\n\n#endif\n";THREE.ShaderChunk["alphamap_pars_fragment"]="#ifdef USE_ALPHAMAP\n\n	uniform sampler2D alphaMap;\n\n#endif\n";THREE.ShaderChunk["alphatest_fragment"]="#ifdef ALPHATEST\n\n	if ( diffuseColor.a < ALPHATEST ) discard;\n\n#endif\n";THREE.ShaderChunk["aomap_fragment"]="#ifdef USE_AOMAP\n\n	totalAmbientLight *= ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n\n#endif\n";THREE.ShaderChunk["aomap_pars_fragment"]="#ifdef USE_AOMAP\n\n	uniform sampler2D aoMap;\n	uniform float aoMapIntensity;\n\n#endif";THREE.ShaderChunk["begin_vertex"]="\nvec3 transformed = vec3( position );\n";THREE.ShaderChunk["beginnormal_vertex"]="\nvec3 objectNormal = vec3( normal );\n";THREE.ShaderChunk["bumpmap_pars_fragment"]="#ifdef USE_BUMPMAP\n\n	uniform sampler2D bumpMap;\n	uniform float bumpScale;\n\n\n\n	vec2 dHdxy_fwd() {\n\n		vec2 dSTdx = dFdx( vUv );\n		vec2 dSTdy = dFdy( vUv );\n\n		float Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n		float dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n		float dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\n		return vec2( dBx, dBy );\n\n	}\n\n	vec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\n		vec3 vSigmaX = dFdx( surf_pos );\n		vec3 vSigmaY = dFdy( surf_pos );\n		vec3 vN = surf_norm;\n		vec3 R1 = cross( vSigmaY, vN );\n		vec3 R2 = cross( vN, vSigmaX );\n\n		float fDet = dot( vSigmaX, R1 );\n\n		vec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n		return normalize( abs( fDet ) * surf_norm - vGrad );\n\n	}\n\n#endif\n";THREE.ShaderChunk["color_fragment"]="#ifdef USE_COLOR\n\n	diffuseColor.rgb *= vColor;\n\n#endif";THREE.ShaderChunk["color_pars_fragment"]="#ifdef USE_COLOR\n\n	varying vec3 vColor;\n\n#endif\n";THREE.ShaderChunk["color_pars_vertex"]="#ifdef USE_COLOR\n\n	varying vec3 vColor;\n\n#endif";THREE.ShaderChunk["color_vertex"]="#ifdef USE_COLOR\n\n	vColor.xyz = color.xyz;\n\n#endif";THREE.ShaderChunk["common"]="#define PI 3.14159\n#define PI2 6.28318\n#define RECIPROCAL_PI2 0.15915494\n#define LOG2 1.442695\n#define EPSILON 1e-6\n\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#define whiteCompliment(a) ( 1.0 - saturate( a ) )\n\nvec3 transformDirection( in vec3 normal, in mat4 matrix ) {\n\n	return normalize( ( matrix * vec4( normal, 0.0 ) ).xyz );\n\n}\n\nvec3 inverseTransformDirection( in vec3 normal, in mat4 matrix ) {\n\n	return normalize( ( vec4( normal, 0.0 ) * matrix ).xyz );\n\n}\n\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\n	float distance = dot( planeNormal, point - pointOnPlane );\n\n	return - distance * planeNormal + point;\n\n}\n\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\n	return sign( dot( point - pointOnPlane, planeNormal ) );\n\n}\n\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\n	return lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n\n}\n\nfloat calcLightAttenuation( float lightDistance, float cutoffDistance, float decayExponent ) {\n\n	if ( decayExponent > 0.0 ) {\n\n	  return pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\n	}\n\n	return 1.0;\n\n}\n\nvec3 F_Schlick( in vec3 specularColor, in float dotLH ) {\n\n\n	float fresnel = exp2( ( -5.55437 * dotLH - 6.98316 ) * dotLH );\n\n	return ( 1.0 - specularColor ) * fresnel + specularColor;\n\n}\n\nfloat G_BlinnPhong_Implicit( /* in float dotNL, in float dotNV */ ) {\n\n\n	return 0.25;\n\n}\n\nfloat D_BlinnPhong( in float shininess, in float dotNH ) {\n\n\n	return ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n\n}\n\nvec3 BRDF_BlinnPhong( in vec3 specularColor, in float shininess, in vec3 normal, in vec3 lightDir, in vec3 viewDir ) {\n\n	vec3 halfDir = normalize( lightDir + viewDir );\n\n	float dotNH = saturate( dot( normal, halfDir ) );\n	float dotLH = saturate( dot( lightDir, halfDir ) );\n\n	vec3 F = F_Schlick( specularColor, dotLH );\n\n	float G = G_BlinnPhong_Implicit( /* dotNL, dotNV */ );\n\n	float D = D_BlinnPhong( shininess, dotNH );\n\n	return F * G * D;\n\n}\n\nvec3 inputToLinear( in vec3 a ) {\n\n	#ifdef GAMMA_INPUT\n\n		return pow( a, vec3( float( GAMMA_FACTOR ) ) );\n\n	#else\n\n		return a;\n\n	#endif\n\n}\n\nvec3 linearToOutput( in vec3 a ) {\n\n	#ifdef GAMMA_OUTPUT\n\n		return pow( a, vec3( 1.0 / float( GAMMA_FACTOR ) ) );\n\n	#else\n\n		return a;\n\n	#endif\n\n}\n";THREE.ShaderChunk["defaultnormal_vertex"]="#ifdef FLIP_SIDED\n\n	objectNormal = -objectNormal;\n\n#endif\n\nvec3 transformedNormal = normalMatrix * objectNormal;\n";THREE.ShaderChunk["displacementmap_vertex"]="#ifdef USE_DISPLACEMENTMAP\n\n	transformed += normal * ( texture2D( displacementMap, uv ).x * displacementScale + displacementBias );\n\n#endif\n";THREE.ShaderChunk["displacementmap_pars_vertex"]="#ifdef USE_DISPLACEMENTMAP\n\n	uniform sampler2D displacementMap;\n	uniform float displacementScale;\n	uniform float displacementBias;\n\n#endif\n";THREE.ShaderChunk["emissivemap_fragment"]="#ifdef USE_EMISSIVEMAP\n\n	vec4 emissiveColor = texture2D( emissiveMap, vUv );\n\n	emissiveColor.rgb = inputToLinear( emissiveColor.rgb );\n\n	totalEmissiveLight *= emissiveColor.rgb;\n\n#endif\n";THREE.ShaderChunk["emissivemap_pars_fragment"]="#ifdef USE_EMISSIVEMAP\n\n	uniform sampler2D emissiveMap;\n\n#endif\n";THREE.ShaderChunk["envmap_fragment"]="#ifdef USE_ENVMAP\n\n	#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\n		vec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\n\n		vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\n		#ifdef ENVMAP_MODE_REFLECTION\n\n			vec3 reflectVec = reflect( cameraToVertex, worldNormal );\n\n		#else\n\n			vec3 reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\n\n		#endif\n\n	#else\n\n		vec3 reflectVec = vReflect;\n\n	#endif\n\n	#ifdef DOUBLE_SIDED\n		float flipNormal = ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n	#else\n		float flipNormal = 1.0;\n	#endif\n\n	#ifdef ENVMAP_TYPE_CUBE\n		vec4 envColor = textureCube( envMap, flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\n	#elif defined( ENVMAP_TYPE_EQUIREC )\n		vec2 sampleUV;\n		sampleUV.y = saturate( flipNormal * reflectVec.y * 0.5 + 0.5 );\n		sampleUV.x = atan( flipNormal * reflectVec.z, flipNormal * reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n		vec4 envColor = texture2D( envMap, sampleUV );\n\n	#elif defined( ENVMAP_TYPE_SPHERE )\n		vec3 reflectView = flipNormal * normalize((viewMatrix * vec4( reflectVec, 0.0 )).xyz + vec3(0.0,0.0,1.0));\n		vec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\n	#endif\n\n	envColor.xyz = inputToLinear( envColor.xyz );\n\n	#ifdef ENVMAP_BLENDING_MULTIPLY\n\n		outgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\n	#elif defined( ENVMAP_BLENDING_MIX )\n\n		outgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\n	#elif defined( ENVMAP_BLENDING_ADD )\n\n		outgoingLight += envColor.xyz * specularStrength * reflectivity;\n\n	#endif\n\n#endif\n";THREE.ShaderChunk["envmap_pars_fragment"]="#ifdef USE_ENVMAP\n\n	uniform float reflectivity;\n	#ifdef ENVMAP_TYPE_CUBE\n		uniform samplerCube envMap;\n	#else\n		uniform sampler2D envMap;\n	#endif\n	uniform float flipEnvMap;\n\n	#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\n		uniform float refractionRatio;\n\n	#else\n\n		varying vec3 vReflect;\n\n	#endif\n\n#endif\n";THREE.ShaderChunk["envmap_pars_vertex"]="#if defined( USE_ENVMAP ) && ! defined( USE_BUMPMAP ) && ! defined( USE_NORMALMAP ) && ! defined( PHONG )\n\n	varying vec3 vReflect;\n\n	uniform float refractionRatio;\n\n#endif\n";THREE.ShaderChunk["envmap_vertex"]="#if defined( USE_ENVMAP ) && ! defined( USE_BUMPMAP ) && ! defined( USE_NORMALMAP ) && ! defined( PHONG )\n\n	vec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\n	vec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\n	#ifdef ENVMAP_MODE_REFLECTION\n\n		vReflect = reflect( cameraToVertex, worldNormal );\n\n	#else\n\n		vReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\n	#endif\n\n#endif\n";THREE.ShaderChunk["fog_fragment"]="#ifdef USE_FOG\n\n	#ifdef USE_LOGDEPTHBUF_EXT\n\n		float depth = gl_FragDepthEXT / gl_FragCoord.w;\n\n	#else\n\n		float depth = gl_FragCoord.z / gl_FragCoord.w;\n\n	#endif\n\n	#ifdef FOG_EXP2\n\n		float fogFactor = whiteCompliment( exp2( - fogDensity * fogDensity * depth * depth * LOG2 ) );\n\n	#else\n\n		float fogFactor = smoothstep( fogNear, fogFar, depth );\n\n	#endif\n	\n	outgoingLight = mix( outgoingLight, fogColor, fogFactor );\n\n#endif";THREE.ShaderChunk["fog_pars_fragment"]="#ifdef USE_FOG\n\n	uniform vec3 fogColor;\n\n	#ifdef FOG_EXP2\n\n		uniform float fogDensity;\n\n	#else\n\n		uniform float fogNear;\n		uniform float fogFar;\n	#endif\n\n#endif";THREE.ShaderChunk["hemilight_fragment"]="#if MAX_HEMI_LIGHTS > 0\n\n	for ( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {\n\n		vec3 lightDir = hemisphereLightDirection[ i ];\n\n		float dotProduct = dot( normal, lightDir );\n\n		float hemiDiffuseWeight = 0.5 * dotProduct + 0.5;\n\n		vec3 lightColor = mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeight );\n\n		totalAmbientLight += lightColor;\n\n	}\n\n#endif\n\n";THREE.ShaderChunk["lightmap_fragment"]="#ifdef USE_LIGHTMAP\n\n	totalAmbientLight += texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n\n#endif\n";THREE.ShaderChunk["lightmap_pars_fragment"]="#ifdef USE_LIGHTMAP\n\n	uniform sampler2D lightMap;\n	uniform float lightMapIntensity;\n\n#endif";THREE.ShaderChunk["lights_lambert_pars_vertex"]="#if MAX_DIR_LIGHTS > 0\n\n	uniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\n	uniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\n\n#endif\n\n#if MAX_HEMI_LIGHTS > 0\n\n	uniform vec3 hemisphereLightSkyColor[ MAX_HEMI_LIGHTS ];\n	uniform vec3 hemisphereLightGroundColor[ MAX_HEMI_LIGHTS ];\n	uniform vec3 hemisphereLightDirection[ MAX_HEMI_LIGHTS ];\n\n#endif\n\n#if MAX_POINT_LIGHTS > 0\n\n	uniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\n	uniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\n	uniform float pointLightDistance[ MAX_POINT_LIGHTS ];\n	uniform float pointLightDecay[ MAX_POINT_LIGHTS ];\n\n#endif\n\n#if MAX_SPOT_LIGHTS > 0\n\n	uniform vec3 spotLightColor[ MAX_SPOT_LIGHTS ];\n	uniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];\n	uniform vec3 spotLightDirection[ MAX_SPOT_LIGHTS ];\n	uniform float spotLightDistance[ MAX_SPOT_LIGHTS ];\n	uniform float spotLightAngleCos[ MAX_SPOT_LIGHTS ];\n	uniform float spotLightExponent[ MAX_SPOT_LIGHTS ];\n	uniform float spotLightDecay[ MAX_SPOT_LIGHTS ];\n\n#endif\n";THREE.ShaderChunk["lights_lambert_vertex"]="vLightFront = vec3( 0.0 );\n\n#ifdef DOUBLE_SIDED\n\n	vLightBack = vec3( 0.0 );\n\n#endif\n\nvec3 normal = normalize( transformedNormal );\n\n#if MAX_POINT_LIGHTS > 0\n\n	for ( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\n\n		vec3 lightColor = pointLightColor[ i ];\n\n		vec3 lVector = pointLightPosition[ i ] - mvPosition.xyz;\n		vec3 lightDir = normalize( lVector );\n\n\n		float attenuation = calcLightAttenuation( length( lVector ), pointLightDistance[ i ], pointLightDecay[ i ] );\n\n\n		float dotProduct = dot( normal, lightDir );\n\n		vLightFront += lightColor * attenuation * saturate( dotProduct );\n\n		#ifdef DOUBLE_SIDED\n\n			vLightBack += lightColor * attenuation * saturate( - dotProduct );\n\n		#endif\n\n	}\n\n#endif\n\n#if MAX_SPOT_LIGHTS > 0\n\n	for ( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {\n\n		vec3 lightColor = spotLightColor[ i ];\n\n		vec3 lightPosition = spotLightPosition[ i ];\n		vec3 lVector = lightPosition - mvPosition.xyz;\n		vec3 lightDir = normalize( lVector );\n\n		float spotEffect = dot( spotLightDirection[ i ], lightDir );\n\n		if ( spotEffect > spotLightAngleCos[ i ] ) {\n\n			spotEffect = saturate( pow( saturate( spotEffect ), spotLightExponent[ i ] ) );\n\n\n			float attenuation = calcLightAttenuation( length( lVector ), spotLightDistance[ i ], spotLightDecay[ i ] );\n\n			attenuation *= spotEffect;\n\n\n			float dotProduct = dot( normal, lightDir );\n\n			vLightFront += lightColor * attenuation * saturate( dotProduct );\n\n			#ifdef DOUBLE_SIDED\n\n				vLightBack += lightColor * attenuation * saturate( - dotProduct );\n\n			#endif\n\n		}\n\n	}\n\n#endif\n\n#if MAX_DIR_LIGHTS > 0\n\n	for ( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {\n\n		vec3 lightColor = directionalLightColor[ i ];\n\n		vec3 lightDir = directionalLightDirection[ i ];\n\n\n		float dotProduct = dot( normal, lightDir );\n\n		vLightFront += lightColor * saturate( dotProduct );\n\n		#ifdef DOUBLE_SIDED\n\n			vLightBack += lightColor * saturate( - dotProduct );\n\n		#endif\n\n	}\n\n#endif\n\n#if MAX_HEMI_LIGHTS > 0\n\n	for ( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {\n\n		vec3 lightDir = hemisphereLightDirection[ i ];\n\n\n		float dotProduct = dot( normal, lightDir );\n\n		float hemiDiffuseWeight = 0.5 * dotProduct + 0.5;\n\n		vLightFront += mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeight );\n\n		#ifdef DOUBLE_SIDED\n\n			float hemiDiffuseWeightBack = - 0.5 * dotProduct + 0.5;\n\n			vLightBack += mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeightBack );\n\n		#endif\n\n	}\n\n#endif\n";

        THREE.ShaderChunk["lights_phong_fragment"]="vec3 viewDir = normalize( vViewPosition );\n\nvec3 totalDiffuseLight = vec3( 0.0 );\nvec3 totalSpecularLight = vec3( 0.0 );\n\n#if MAX_POINT_LIGHTS > 0\n\n	for ( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\n\n		vec3 lightColor = pointLightColor[ i ];\n\n		vec3 lightPosition = pointLightPosition[ i ];\n		vec3 lVector = lightPosition + vViewPosition.xyz;\n		vec3 lightDir = normalize( lVector );\n\n\n		float attenuation = calcLightAttenuation( length( lVector ), pointLightDistance[ i ], pointLightDecay[ i ] );\n\n\n		float cosineTerm = saturate( dot( normal, lightDir ) );\n\n		totalDiffuseLight += lightColor * attenuation * cosineTerm;\n\n\n		vec3 brdf = BRDF_BlinnPhong( specular, shininess, normal, lightDir, viewDir );\n\n		totalSpecularLight += brdf * specularStrength * lightColor * attenuation * cosineTerm;\n\n\n	}\n\n#endif\n\n#if MAX_SPOT_LIGHTS > 0\n\n	for ( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {\n\n		vec3 lightColor = spotLightColor[ i ];\n\n		vec3 lightPosition = spotLightPosition[ i ];\n		vec3 lVector = lightPosition + vViewPosition.xyz;\n		vec3 lightDir = normalize( lVector );\n\n		float spotEffect = dot( spotLightDirection[ i ], lightDir );\n\n		if ( spotEffect > spotLightAngleCos[ i ] ) {\n\n			spotEffect = saturate( pow( saturate( spotEffect ), spotLightExponent[ i ] ) );\n\n\n			float attenuation = calcLightAttenuation( length( lVector ), spotLightDistance[ i ], spotLightDecay[ i ] );\n\n			attenuation *= spotEffect;\n\n\n			float cosineTerm = saturate( dot( normal, lightDir ) );\n\n			totalDiffuseLight += lightColor * attenuation * cosineTerm;\n\n\n			vec3 brdf = BRDF_BlinnPhong( specular, shininess, normal, lightDir, viewDir );\n\n			totalSpecularLight += brdf * specularStrength * lightColor * attenuation * cosineTerm;\n\n		}\n\n	}\n\n#endif\n\n#if MAX_DIR_LIGHTS > 0\n\n	for ( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {\n\n		vec3 lightColor = directionalLightColor[ i ];\n\n		vec3 lightDir = directionalLightDirection[ i ];\n\n\n		float cosineTerm = saturate( dot( normal, lightDir ) );\n\n		totalDiffuseLight += lightColor * cosineTerm;\n\n\n		vec3 brdf = BRDF_BlinnPhong( specular, shininess, normal, lightDir, viewDir );\n\n		totalSpecularLight += brdf * specularStrength * lightColor * cosineTerm;\n\n	}\n\n#endif\n";THREE.ShaderChunk["lights_phong_pars_fragment"]="uniform vec3 ambientLightColor;\n\n#if MAX_DIR_LIGHTS > 0\n\n	uniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\n	uniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\n\n#endif\n\n#if MAX_HEMI_LIGHTS > 0\n\n	uniform vec3 hemisphereLightSkyColor[ MAX_HEMI_LIGHTS ];\n	uniform vec3 hemisphereLightGroundColor[ MAX_HEMI_LIGHTS ];\n	uniform vec3 hemisphereLightDirection[ MAX_HEMI_LIGHTS ];\n\n#endif\n\n#if MAX_POINT_LIGHTS > 0\n\n	uniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\n\n	uniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\n	uniform float pointLightDistance[ MAX_POINT_LIGHTS ];\n	uniform float pointLightDecay[ MAX_POINT_LIGHTS ];\n\n#endif\n\n#if MAX_SPOT_LIGHTS > 0\n\n	uniform vec3 spotLightColor[ MAX_SPOT_LIGHTS ];\n	uniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];\n	uniform vec3 spotLightDirection[ MAX_SPOT_LIGHTS ];\n	uniform float spotLightAngleCos[ MAX_SPOT_LIGHTS ];\n	uniform float spotLightExponent[ MAX_SPOT_LIGHTS ];\n	uniform float spotLightDistance[ MAX_SPOT_LIGHTS ];\n	uniform float spotLightDecay[ MAX_SPOT_LIGHTS ];\n\n#endif\n\n#if MAX_SPOT_LIGHTS > 0 || defined( USE_ENVMAP )\n\n	varying vec3 vWorldPosition;\n\n#endif\n\nvarying vec3 vViewPosition;\n\n#ifndef FLAT_SHADED\n\n	varying vec3 vNormal;\n\n#endif\n";THREE.ShaderChunk["lights_phong_pars_vertex"]="#if MAX_SPOT_LIGHTS > 0 || defined( USE_ENVMAP )\n\n	varying vec3 vWorldPosition;\n\n#endif\n\n#if MAX_POINT_LIGHTS > 0\n\n	uniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\n\n#endif\n";THREE.ShaderChunk["lights_phong_vertex"]="#if MAX_SPOT_LIGHTS > 0 || defined( USE_ENVMAP )\n\n	vWorldPosition = worldPosition.xyz;\n\n#endif\n";THREE.ShaderChunk["linear_to_gamma_fragment"]="\n	outgoingLight = linearToOutput( outgoingLight );\n";THREE.ShaderChunk["logdepthbuf_fragment"]="#if defined(USE_LOGDEPTHBUF) && defined(USE_LOGDEPTHBUF_EXT)\n\n	gl_FragDepthEXT = log2(vFragDepth) * logDepthBufFC * 0.5;\n\n#endif";THREE.ShaderChunk["logdepthbuf_pars_fragment"]="#ifdef USE_LOGDEPTHBUF\n\n	uniform float logDepthBufFC;\n\n	#ifdef USE_LOGDEPTHBUF_EXT\n\n		varying float vFragDepth;\n\n	#endif\n\n#endif\n";THREE.ShaderChunk["logdepthbuf_pars_vertex"]="#ifdef USE_LOGDEPTHBUF\n\n	#ifdef USE_LOGDEPTHBUF_EXT\n\n		varying float vFragDepth;\n\n	#endif\n\n	uniform float logDepthBufFC;\n\n#endif";THREE.ShaderChunk["logdepthbuf_vertex"]="#ifdef USE_LOGDEPTHBUF\n\n	gl_Position.z = log2(max( EPSILON, gl_Position.w + 1.0 )) * logDepthBufFC;\n\n	#ifdef USE_LOGDEPTHBUF_EXT\n\n		vFragDepth = 1.0 + gl_Position.w;\n\n#else\n\n		gl_Position.z = (gl_Position.z - 1.0) * gl_Position.w;\n\n	#endif\n\n#endif";THREE.ShaderChunk["map_fragment"]="#ifdef USE_MAP\n\n	vec4 texelColor = texture2D( map, vUv );\n\n	texelColor.xyz = inputToLinear( texelColor.xyz );\n\n	diffuseColor *= texelColor;\n\n#endif\n";THREE.ShaderChunk["map_pars_fragment"]="#ifdef USE_MAP\n\n	uniform sampler2D map;\n\n#endif";THREE.ShaderChunk["map_particle_fragment"]="#ifdef USE_MAP\n\n	diffuseColor *= texture2D( map, vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y ) * offsetRepeat.zw + offsetRepeat.xy );\n\n#endif\n";THREE.ShaderChunk["map_particle_pars_fragment"]="#ifdef USE_MAP\n\n	uniform vec4 offsetRepeat;\n	uniform sampler2D map;\n\n#endif\n";THREE.ShaderChunk["morphnormal_vertex"]="#ifdef USE_MORPHNORMALS\n\n	objectNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\n	objectNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\n	objectNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\n	objectNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\n\n#endif\n";THREE.ShaderChunk["morphtarget_pars_vertex"]="#ifdef USE_MORPHTARGETS\n\n	#ifndef USE_MORPHNORMALS\n\n	uniform float morphTargetInfluences[ 8 ];\n\n	#else\n\n	uniform float morphTargetInfluences[ 4 ];\n\n	#endif\n\n#endif";THREE.ShaderChunk["morphtarget_vertex"]="#ifdef USE_MORPHTARGETS\n\n	transformed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\n	transformed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\n	transformed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\n	transformed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\n\n	#ifndef USE_MORPHNORMALS\n\n	transformed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\n	transformed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\n	transformed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\n	transformed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\n\n	#endif\n\n#endif\n";THREE.ShaderChunk["normal_phong_fragment"]="#ifndef FLAT_SHADED\n\n	vec3 normal = normalize( vNormal );\n\n	#ifdef DOUBLE_SIDED\n\n		normal = normal * ( -1.0 + 2.0 * float( gl_FrontFacing ) );\n\n	#endif\n\n#else\n\n	vec3 fdx = dFdx( vViewPosition );\n	vec3 fdy = dFdy( vViewPosition );\n	vec3 normal = normalize( cross( fdx, fdy ) );\n\n#endif\n\n#ifdef USE_NORMALMAP\n\n	normal = perturbNormal2Arb( -vViewPosition, normal );\n\n#elif defined( USE_BUMPMAP )\n\n	normal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n\n#endif\n\n";THREE.ShaderChunk["normalmap_pars_fragment"]="#ifdef USE_NORMALMAP\n\n	uniform sampler2D normalMap;\n	uniform vec2 normalScale;\n\n\n	vec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\n\n		vec3 q0 = dFdx( eye_pos.xyz );\n		vec3 q1 = dFdy( eye_pos.xyz );\n		vec2 st0 = dFdx( vUv.st );\n		vec2 st1 = dFdy( vUv.st );\n\n		vec3 S = normalize( q0 * st1.t - q1 * st0.t );\n		vec3 T = normalize( -q0 * st1.s + q1 * st0.s );\n		vec3 N = normalize( surf_norm );\n\n		vec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n		mapN.xy = normalScale * mapN.xy;\n		mat3 tsn = mat3( S, T, N );\n		return normalize( tsn * mapN );\n\n	}\n\n#endif\n";THREE.ShaderChunk["project_vertex"]="#ifdef USE_SKINNING\n\n	vec4 mvPosition = modelViewMatrix * skinned;\n\n#else\n\n	vec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\n\n#endif\n\ngl_Position = projectionMatrix * mvPosition;\n";THREE.ShaderChunk["shadowmap_fragment"]="#ifdef USE_SHADOWMAP\n\n	for ( int i = 0; i < MAX_SHADOWS; i ++ ) {\n\n		float texelSizeY =  1.0 / shadowMapSize[ i ].y;\n\n		float shadow = 0.0;\n\n#if defined( POINT_LIGHT_SHADOWS )\n\n		bool isPointLight = shadowDarkness[ i ] < 0.0;\n\n		if ( isPointLight ) {\n\n			float realShadowDarkness = abs( shadowDarkness[ i ] );\n\n			vec3 lightToPosition = vShadowCoord[ i ].xyz;\n\n	#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT )\n\n			vec3 bd3D = normalize( lightToPosition );\n			float dp = length( lightToPosition );\n\n			adjustShadowValue1K( dp, texture2D( shadowMap[ i ], cubeToUV( bd3D, texelSizeY ) ), shadowBias[ i ], shadow );\n\n\n	#if defined( SHADOWMAP_TYPE_PCF )\n			const float Dr = 1.25;\n	#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n			const float Dr = 2.25;\n	#endif\n\n			float os = Dr *  2.0 * texelSizeY;\n\n			const vec3 Gsd = vec3( - 1, 0, 1 );\n\n			adjustShadowValue1K( dp, texture2D( shadowMap[ i ], cubeToUV( bd3D + Gsd.zzz * os, texelSizeY ) ), shadowBias[ i ], shadow );\n			adjustShadowValue1K( dp, texture2D( shadowMap[ i ], cubeToUV( bd3D + Gsd.zxz * os, texelSizeY ) ), shadowBias[ i ], shadow );\n			adjustShadowValue1K( dp, texture2D( shadowMap[ i ], cubeToUV( bd3D + Gsd.xxz * os, texelSizeY ) ), shadowBias[ i ], shadow );\n			adjustShadowValue1K( dp, texture2D( shadowMap[ i ], cubeToUV( bd3D + Gsd.xzz * os, texelSizeY ) ), shadowBias[ i ], shadow );\n			adjustShadowValue1K( dp, texture2D( shadowMap[ i ], cubeToUV( bd3D + Gsd.zzx * os, texelSizeY ) ), shadowBias[ i ], shadow );\n			adjustShadowValue1K( dp, texture2D( shadowMap[ i ], cubeToUV( bd3D + Gsd.zxx * os, texelSizeY ) ), shadowBias[ i ], shadow );\n			adjustShadowValue1K( dp, texture2D( shadowMap[ i ], cubeToUV( bd3D + Gsd.xxx * os, texelSizeY ) ), shadowBias[ i ], shadow );\n			adjustShadowValue1K( dp, texture2D( shadowMap[ i ], cubeToUV( bd3D + Gsd.xzx * os, texelSizeY ) ), shadowBias[ i ], shadow );\n			adjustShadowValue1K( dp, texture2D( shadowMap[ i ], cubeToUV( bd3D + Gsd.zzy * os, texelSizeY ) ), shadowBias[ i ], shadow );\n			adjustShadowValue1K( dp, texture2D( shadowMap[ i ], cubeToUV( bd3D + Gsd.zxy * os, texelSizeY ) ), shadowBias[ i ], shadow );\n\n			adjustShadowValue1K( dp, texture2D( shadowMap[ i ], cubeToUV( bd3D + Gsd.xxy * os, texelSizeY ) ), shadowBias[ i ], shadow );\n			adjustShadowValue1K( dp, texture2D( shadowMap[ i ], cubeToUV( bd3D + Gsd.xzy * os, texelSizeY ) ), shadowBias[ i ], shadow );\n			adjustShadowValue1K( dp, texture2D( shadowMap[ i ], cubeToUV( bd3D + Gsd.zyz * os, texelSizeY ) ), shadowBias[ i ], shadow );\n			adjustShadowValue1K( dp, texture2D( shadowMap[ i ], cubeToUV( bd3D + Gsd.xyz * os, texelSizeY ) ), shadowBias[ i ], shadow );\n			adjustShadowValue1K( dp, texture2D( shadowMap[ i ], cubeToUV( bd3D + Gsd.zyx * os, texelSizeY ) ), shadowBias[ i ], shadow );\n			adjustShadowValue1K( dp, texture2D( shadowMap[ i ], cubeToUV( bd3D + Gsd.xyx * os, texelSizeY ) ), shadowBias[ i ], shadow );\n			adjustShadowValue1K( dp, texture2D( shadowMap[ i ], cubeToUV( bd3D + Gsd.yzz * os, texelSizeY ) ), shadowBias[ i ], shadow );\n			adjustShadowValue1K( dp, texture2D( shadowMap[ i ], cubeToUV( bd3D + Gsd.yxz * os, texelSizeY ) ), shadowBias[ i ], shadow );\n			adjustShadowValue1K( dp, texture2D( shadowMap[ i ], cubeToUV( bd3D + Gsd.yxx * os, texelSizeY ) ), shadowBias[ i ], shadow );\n			adjustShadowValue1K( dp, texture2D( shadowMap[ i ], cubeToUV( bd3D + Gsd.yzx * os, texelSizeY ) ), shadowBias[ i ], shadow );\n\n			shadow *= realShadowDarkness * ( 1.0 / 21.0 );\n\n	#else \n			vec3 bd3D = normalize( lightToPosition );\n			float dp = length( lightToPosition );\n\n			adjustShadowValue1K( dp, texture2D( shadowMap[ i ], cubeToUV( bd3D, texelSizeY ) ), shadowBias[ i ], shadow );\n\n			shadow *= realShadowDarkness;\n\n	#endif\n\n		} else {\n\n#endif \n			float texelSizeX =  1.0 / shadowMapSize[ i ].x;\n\n			vec3 shadowCoord = vShadowCoord[ i ].xyz / vShadowCoord[ i ].w;\n\n\n			bvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n			bool inFrustum = all( inFrustumVec );\n\n			bvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\n			bool frustumTest = all( frustumTestVec );\n\n			if ( frustumTest ) {\n\n	#if defined( SHADOWMAP_TYPE_PCF )\n\n\n				/*\n					for ( float y = -1.25; y <= 1.25; y += 1.25 )\n						for ( float x = -1.25; x <= 1.25; x += 1.25 ) {\n							vec4 rgbaDepth = texture2D( shadowMap[ i ], vec2( x * xPixelOffset, y * yPixelOffset ) + shadowCoord.xy );\n							float fDepth = unpackDepth( rgbaDepth );\n							if ( fDepth < shadowCoord.z )\n								shadow += 1.0;\n					}\n					shadow /= 9.0;\n				*/\n\n				shadowCoord.z += shadowBias[ i ];\n\n				const float ShadowDelta = 1.0 / 9.0;\n\n				float xPixelOffset = texelSizeX;\n				float yPixelOffset = texelSizeY;\n\n				float dx0 = - 1.25 * xPixelOffset;\n				float dy0 = - 1.25 * yPixelOffset;\n				float dx1 = 1.25 * xPixelOffset;\n				float dy1 = 1.25 * yPixelOffset;\n\n				float fDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy0 ) ) );\n				if ( fDepth < shadowCoord.z ) shadow += ShadowDelta;\n\n				fDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy0 ) ) );\n				if ( fDepth < shadowCoord.z ) shadow += ShadowDelta;\n\n				fDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy0 ) ) );\n				if ( fDepth < shadowCoord.z ) shadow += ShadowDelta;\n\n				fDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, 0.0 ) ) );\n				if ( fDepth < shadowCoord.z ) shadow += ShadowDelta;\n\n				fDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy ) );\n				if ( fDepth < shadowCoord.z ) shadow += ShadowDelta;\n\n				fDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, 0.0 ) ) );\n				if ( fDepth < shadowCoord.z ) shadow += ShadowDelta;\n\n				fDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy1 ) ) );\n				if ( fDepth < shadowCoord.z ) shadow += ShadowDelta;\n\n				fDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy1 ) ) );\n				if ( fDepth < shadowCoord.z ) shadow += ShadowDelta;\n\n				fDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy1 ) ) );\n				if ( fDepth < shadowCoord.z ) shadow += ShadowDelta;\n\n				shadow *= shadowDarkness[ i ];\n\n	#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\n\n				shadowCoord.z += shadowBias[ i ];\n\n				float xPixelOffset = texelSizeX;\n				float yPixelOffset = texelSizeY;\n\n				float dx0 = - 1.0 * xPixelOffset;\n				float dy0 = - 1.0 * yPixelOffset;\n				float dx1 = 1.0 * xPixelOffset;\n				float dy1 = 1.0 * yPixelOffset;\n\n				mat3 shadowKernel;\n				mat3 depthKernel;\n\n				depthKernel[ 0 ][ 0 ] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy0 ) ) );\n				depthKernel[ 0 ][ 1 ] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, 0.0 ) ) );\n				depthKernel[ 0 ][ 2 ] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy1 ) ) );\n				depthKernel[ 1 ][ 0 ] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy0 ) ) );\n				depthKernel[ 1 ][ 1 ] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy ) );\n				depthKernel[ 1 ][ 2 ] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy1 ) ) );\n				depthKernel[ 2 ][ 0 ] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy0 ) ) );\n				depthKernel[ 2 ][ 1 ] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, 0.0 ) ) );\n				depthKernel[ 2 ][ 2 ] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy1 ) ) );\n\n				vec3 shadowZ = vec3( shadowCoord.z );\n				shadowKernel[ 0 ] = vec3( lessThan( depthKernel[ 0 ], shadowZ ) );\n				shadowKernel[ 0 ] *= vec3( 0.25 );\n\n				shadowKernel[ 1 ] = vec3( lessThan( depthKernel[ 1 ], shadowZ ) );\n				shadowKernel[ 1 ] *= vec3( 0.25 );\n\n				shadowKernel[ 2 ] = vec3( lessThan( depthKernel[ 2 ], shadowZ ) );\n				shadowKernel[ 2 ] *= vec3( 0.25 );\n\n				vec2 fractionalCoord = 1.0 - fract( shadowCoord.xy * shadowMapSize[ i ].xy );\n\n				shadowKernel[ 0 ] = mix( shadowKernel[ 1 ], shadowKernel[ 0 ], fractionalCoord.x );\n				shadowKernel[ 1 ] = mix( shadowKernel[ 2 ], shadowKernel[ 1 ], fractionalCoord.x );\n\n				vec4 shadowValues;\n				shadowValues.x = mix( shadowKernel[ 0 ][ 1 ], shadowKernel[ 0 ][ 0 ], fractionalCoord.y );\n				shadowValues.y = mix( shadowKernel[ 0 ][ 2 ], shadowKernel[ 0 ][ 1 ], fractionalCoord.y );\n				shadowValues.z = mix( shadowKernel[ 1 ][ 1 ], shadowKernel[ 1 ][ 0 ], fractionalCoord.y );\n				shadowValues.w = mix( shadowKernel[ 1 ][ 2 ], shadowKernel[ 1 ][ 1 ], fractionalCoord.y );\n\n				shadow = dot( shadowValues, vec4( 1.0 ) ) * shadowDarkness[ i ];\n\n	#else \n				shadowCoord.z += shadowBias[ i ];\n\n				vec4 rgbaDepth = texture2D( shadowMap[ i ], shadowCoord.xy );\n				float fDepth = unpackDepth( rgbaDepth );\n\n				if ( fDepth < shadowCoord.z )\n					shadow = shadowDarkness[ i ];\n\n	#endif\n\n			}\n\n#ifdef SHADOWMAP_DEBUG\n\n			if ( inFrustum ) {\n\n				if ( i == 0 ) {\n\n					outgoingLight *= vec3( 1.0, 0.5, 0.0 );\n\n				} else if ( i == 1 ) {\n\n					outgoingLight *= vec3( 0.0, 1.0, 0.8 );\n\n				} else {\n\n					outgoingLight *= vec3( 0.0, 0.5, 1.0 );\n\n				}\n\n			}\n\n#endif\n\n#if defined( POINT_LIGHT_SHADOWS )\n\n		}\n\n#endif\n\n		shadowMask = shadowMask * vec3( 1.0 - shadow );\n\n	}\n\n#endif\n";THREE.ShaderChunk["shadowmap_pars_fragment"]="#ifdef USE_SHADOWMAP\n\n	uniform sampler2D shadowMap[ MAX_SHADOWS ];\n	uniform vec2 shadowMapSize[ MAX_SHADOWS ];\n\n	uniform float shadowDarkness[ MAX_SHADOWS ];\n	uniform float shadowBias[ MAX_SHADOWS ];\n\n	varying vec4 vShadowCoord[ MAX_SHADOWS ];\n\n	float unpackDepth( const in vec4 rgba_depth ) {\n\n		const vec4 bit_shift = vec4( 1.0 / ( 256.0 * 256.0 * 256.0 ), 1.0 / ( 256.0 * 256.0 ), 1.0 / 256.0, 1.0 );\n		float depth = dot( rgba_depth, bit_shift );\n		return depth;\n\n	}\n\n	#if defined(POINT_LIGHT_SHADOWS)\n\n\n		void adjustShadowValue1K( const float testDepth, const vec4 textureData, const float bias, inout float shadowValue ) {\n\n			const vec4 bitSh = vec4( 1.0 / ( 256.0 * 256.0 * 256.0 ), 1.0 / ( 256.0 * 256.0 ), 1.0 / 256.0, 1.0 );\n			if ( testDepth >= dot( textureData, bitSh ) * 1000.0 + bias )\n				shadowValue += 1.0;\n\n		}\n\n\n		vec2 cubeToUV( vec3 v, float texelSizeY ) {\n\n\n			vec3 absV = abs( v );\n\n\n			float scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n			absV *= scaleToCube;\n\n\n			v *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\n\n\n			vec2 planar = v.xy;\n\n			float almostATexel = 1.5 * texelSizeY;\n			float almostOne = 1.0 - almostATexel;\n\n			if ( absV.z >= almostOne ) {\n\n				if ( v.z > 0.0 )\n					planar.x = 4.0 - v.x;\n\n			} else if ( absV.x >= almostOne ) {\n\n				float signX = sign( v.x );\n				planar.x = v.z * signX + 2.0 * signX;\n\n			} else if ( absV.y >= almostOne ) {\n\n				float signY = sign( v.y );\n				planar.x = v.x + 2.0 * signY + 2.0;\n				planar.y = v.z * signY - 2.0;\n\n			}\n\n\n			return vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\n		}\n\n	#endif\n\n#endif\n";THREE.ShaderChunk["shadowmap_pars_vertex"]="#ifdef USE_SHADOWMAP\n\n	uniform float shadowDarkness[ MAX_SHADOWS ];\n	uniform mat4 shadowMatrix[ MAX_SHADOWS ];\n	varying vec4 vShadowCoord[ MAX_SHADOWS ];\n\n#endif";THREE.ShaderChunk["shadowmap_vertex"]="#ifdef USE_SHADOWMAP\n\n	for ( int i = 0; i < MAX_SHADOWS; i ++ ) {\n\n			vShadowCoord[ i ] = shadowMatrix[ i ] * worldPosition;\n\n	}\n\n#endif";THREE.ShaderChunk["skinbase_vertex"]="#ifdef USE_SKINNING\n\n	mat4 boneMatX = getBoneMatrix( skinIndex.x );\n	mat4 boneMatY = getBoneMatrix( skinIndex.y );\n	mat4 boneMatZ = getBoneMatrix( skinIndex.z );\n	mat4 boneMatW = getBoneMatrix( skinIndex.w );\n\n#endif";THREE.ShaderChunk["skinning_pars_vertex"]="#ifdef USE_SKINNING\n\n	uniform mat4 bindMatrix;\n	uniform mat4 bindMatrixInverse;\n\n	#ifdef BONE_TEXTURE\n\n		uniform sampler2D boneTexture;\n		uniform int boneTextureWidth;\n		uniform int boneTextureHeight;\n\n		mat4 getBoneMatrix( const in float i ) {\n\n			float j = i * 4.0;\n			float x = mod( j, float( boneTextureWidth ) );\n			float y = floor( j / float( boneTextureWidth ) );\n\n			float dx = 1.0 / float( boneTextureWidth );\n			float dy = 1.0 / float( boneTextureHeight );\n\n			y = dy * ( y + 0.5 );\n\n			vec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n			vec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n			vec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n			vec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\n			mat4 bone = mat4( v1, v2, v3, v4 );\n\n			return bone;\n\n		}\n\n	#else\n\n		uniform mat4 boneGlobalMatrices[ MAX_BONES ];\n\n		mat4 getBoneMatrix( const in float i ) {\n\n			mat4 bone = boneGlobalMatrices[ int(i) ];\n			return bone;\n\n		}\n\n	#endif\n\n#endif\n";THREE.ShaderChunk["skinning_vertex"]="#ifdef USE_SKINNING\n\n	vec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\n	vec4 skinned = vec4( 0.0 );\n	skinned += boneMatX * skinVertex * skinWeight.x;\n	skinned += boneMatY * skinVertex * skinWeight.y;\n	skinned += boneMatZ * skinVertex * skinWeight.z;\n	skinned += boneMatW * skinVertex * skinWeight.w;\n	skinned  = bindMatrixInverse * skinned;\n\n#endif\n";THREE.ShaderChunk["skinnormal_vertex"]="#ifdef USE_SKINNING\n\n	mat4 skinMatrix = mat4( 0.0 );\n	skinMatrix += skinWeight.x * boneMatX;\n	skinMatrix += skinWeight.y * boneMatY;\n	skinMatrix += skinWeight.z * boneMatZ;\n	skinMatrix += skinWeight.w * boneMatW;\n	skinMatrix  = bindMatrixInverse * skinMatrix * bindMatrix;\n\n	objectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\n#endif\n";THREE.ShaderChunk["specularmap_fragment"]="float specularStrength;\n\n#ifdef USE_SPECULARMAP\n\n	vec4 texelSpecular = texture2D( specularMap, vUv );\n	specularStrength = texelSpecular.r;\n\n#else\n\n	specularStrength = 1.0;\n\n#endif";THREE.ShaderChunk["specularmap_pars_fragment"]="#ifdef USE_SPECULARMAP\n\n	uniform sampler2D specularMap;\n\n#endif";THREE.ShaderChunk["uv2_pars_fragment"]="#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\n	varying vec2 vUv2;\n\n#endif";THREE.ShaderChunk["uv2_pars_vertex"]="#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\n	attribute vec2 uv2;\n	varying vec2 vUv2;\n\n#endif";THREE.ShaderChunk["uv2_vertex"]="#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\n	vUv2 = uv2;\n\n#endif";THREE.ShaderChunk["uv_pars_fragment"]="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP )\n\n	varying vec2 vUv;\n\n#endif";THREE.ShaderChunk["uv_pars_vertex"]="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP )\n\n	varying vec2 vUv;\n	uniform vec4 offsetRepeat;\n\n#endif\n";THREE.ShaderChunk["uv_vertex"]="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP )\n\n	vUv = uv * offsetRepeat.zw + offsetRepeat.xy;\n\n#endif";THREE.ShaderChunk["worldpos_vertex"]="#if defined( USE_ENVMAP ) || defined( PHONG ) || defined( LAMBERT ) || defined ( USE_SHADOWMAP )\n\n	#ifdef USE_SKINNING\n\n		vec4 worldPosition = modelMatrix * skinned;\n\n	#else\n\n		vec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\n\n	#endif\n\n#endif\n";THREE.UniformsUtils={merge:function(uniforms){var merged={};for(var u=0;u<uniforms.length;u++){var tmp=this.clone(uniforms[u]);for(var p in tmp){merged[p]=tmp[p]}}return merged},clone:function(uniforms_src){var uniforms_dst={};for(var u in uniforms_src){uniforms_dst[u]={};for(var p in uniforms_src[u]){var parameter_src=uniforms_src[u][p];if(parameter_src instanceof THREE.Color||parameter_src instanceof THREE.Vector2||parameter_src instanceof THREE.Vector3||parameter_src instanceof THREE.Vector4||parameter_src instanceof THREE.Matrix3||parameter_src instanceof THREE.Matrix4||parameter_src instanceof THREE.Texture){uniforms_dst[u][p]=parameter_src.clone()}else if(Array.isArray(parameter_src)){uniforms_dst[u][p]=parameter_src.slice()}else{uniforms_dst[u][p]=parameter_src}}}return uniforms_dst}};THREE.UniformsLib={common:{diffuse:{type:"c",value:new THREE.Color(15658734)},opacity:{type:"f",value:1},map:{type:"t",value:null},offsetRepeat:{type:"v4",value:new THREE.Vector4(0,0,1,1)},specularMap:{type:"t",value:null},alphaMap:{type:"t",value:null},envMap:{type:"t",value:null},flipEnvMap:{type:"f",value:-1},reflectivity:{type:"f",value:1},refractionRatio:{type:"f",value:.98}},aomap:{aoMap:{type:"t",value:null},aoMapIntensity:{type:"f",value:1}},lightmap:{lightMap:{type:"t",value:null},lightMapIntensity:{type:"f",value:1}},emissivemap:{emissiveMap:{type:"t",value:null}},bumpmap:{bumpMap:{type:"t",value:null},bumpScale:{type:"f",value:1}},normalmap:{normalMap:{type:"t",value:null},normalScale:{type:"v2",value:new THREE.Vector2(1,1)}},displacementmap:{displacementMap:{type:"t",value:null},displacementScale:{type:"f",value:1},displacementBias:{type:"f",value:0}},fog:{fogDensity:{type:"f",value:25e-5},fogNear:{type:"f",value:1},fogFar:{type:"f",value:2e3},fogColor:{type:"c",value:new THREE.Color(16777215)}},lights:{ambientLightColor:{type:"fv",value:[]},directionalLightDirection:{type:"fv",value:[]},directionalLightColor:{type:"fv",value:[]},hemisphereLightDirection:{type:"fv",value:[]},hemisphereLightSkyColor:{type:"fv",value:[]},hemisphereLightGroundColor:{type:"fv",value:[]},pointLightColor:{type:"fv",value:[]},pointLightPosition:{type:"fv",value:[]},pointLightDistance:{type:"fv1",value:[]},pointLightDecay:{type:"fv1",value:[]},spotLightColor:{type:"fv",value:[]},spotLightPosition:{type:"fv",value:[]},spotLightDirection:{type:"fv",value:[]},spotLightDistance:{type:"fv1",value:[]},spotLightAngleCos:{type:"fv1",value:[]},spotLightExponent:{type:"fv1",value:[]},spotLightDecay:{type:"fv1",value:[]}},points:{psColor:{type:"c",value:new THREE.Color(15658734)},opacity:{type:"f",value:1},size:{type:"f",value:1},scale:{type:"f",value:1},map:{type:"t",value:null},offsetRepeat:{type:"v4",value:new THREE.Vector4(0,0,1,1)},fogDensity:{type:"f",value:25e-5},fogNear:{type:"f",value:1},fogFar:{type:"f",value:2e3},fogColor:{type:"c",value:new THREE.Color(16777215)}},shadowmap:{shadowMap:{type:"tv",value:[]},shadowMapSize:{type:"v2v",value:[]},shadowBias:{type:"fv1",value:[]},shadowDarkness:{type:"fv1",value:[]},shadowMatrix:{type:"m4v",value:[]}}};THREE.ShaderLib={basic:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib["common"],THREE.UniformsLib["aomap"],THREE.UniformsLib["fog"],THREE.UniformsLib["shadowmap"]]),vertexShader:[THREE.ShaderChunk["common"],THREE.ShaderChunk["uv_pars_vertex"],THREE.ShaderChunk["uv2_pars_vertex"],THREE.ShaderChunk["envmap_pars_vertex"],THREE.ShaderChunk["color_pars_vertex"],THREE.ShaderChunk["morphtarget_pars_vertex"],THREE.ShaderChunk["skinning_pars_vertex"],THREE.ShaderChunk["shadowmap_pars_vertex"],THREE.ShaderChunk["logdepthbuf_pars_vertex"],"void main() {",THREE.ShaderChunk["uv_vertex"],THREE.ShaderChunk["uv2_vertex"],THREE.ShaderChunk["color_vertex"],THREE.ShaderChunk["skinbase_vertex"],"	#ifdef USE_ENVMAP",THREE.ShaderChunk["beginnormal_vertex"],THREE.ShaderChunk["morphnormal_vertex"],THREE.ShaderChunk["skinnormal_vertex"],THREE.ShaderChunk["defaultnormal_vertex"],"	#endif",THREE.ShaderChunk["begin_vertex"],THREE.ShaderChunk["morphtarget_vertex"],THREE.ShaderChunk["skinning_vertex"],THREE.ShaderChunk["project_vertex"],THREE.ShaderChunk["logdepthbuf_vertex"],THREE.ShaderChunk["worldpos_vertex"],THREE.ShaderChunk["envmap_vertex"],THREE.ShaderChunk["shadowmap_vertex"],"}"].join("\n"),fragmentShader:["uniform vec3 diffuse;","uniform float opacity;",THREE.ShaderChunk["common"],THREE.ShaderChunk["color_pars_fragment"],THREE.ShaderChunk["uv_pars_fragment"],THREE.ShaderChunk["uv2_pars_fragment"],THREE.ShaderChunk["map_pars_fragment"],THREE.ShaderChunk["alphamap_pars_fragment"],THREE.ShaderChunk["aomap_pars_fragment"],THREE.ShaderChunk["envmap_pars_fragment"],THREE.ShaderChunk["fog_pars_fragment"],THREE.ShaderChunk["shadowmap_pars_fragment"],THREE.ShaderChunk["specularmap_pars_fragment"],THREE.ShaderChunk["logdepthbuf_pars_fragment"],"void main() {","	vec3 outgoingLight = vec3( 0.0 );","	vec4 diffuseColor = vec4( diffuse, opacity );","	vec3 totalAmbientLight = vec3( 1.0 );","	vec3 shadowMask = vec3( 1.0 );",THREE.ShaderChunk["logdepthbuf_fragment"],THREE.ShaderChunk["map_fragment"],THREE.ShaderChunk["color_fragment"],THREE.ShaderChunk["alphamap_fragment"],THREE.ShaderChunk["alphatest_fragment"],THREE.ShaderChunk["specularmap_fragment"],THREE.ShaderChunk["aomap_fragment"],THREE.ShaderChunk["shadowmap_fragment"],"	outgoingLight = diffuseColor.rgb * totalAmbientLight * shadowMask;",THREE.ShaderChunk["envmap_fragment"],THREE.ShaderChunk["linear_to_gamma_fragment"],THREE.ShaderChunk["fog_fragment"],"	gl_FragColor = vec4( outgoingLight, diffuseColor.a );","}"].join("\n")},lambert:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib["common"],THREE.UniformsLib["fog"],THREE.UniformsLib["lights"],THREE.UniformsLib["shadowmap"],{emissive:{type:"c",value:new THREE.Color(0)}}]),vertexShader:["#define LAMBERT","varying vec3 vLightFront;","#ifdef DOUBLE_SIDED","	varying vec3 vLightBack;","#endif",THREE.ShaderChunk["common"],THREE.ShaderChunk["uv_pars_vertex"],THREE.ShaderChunk["uv2_pars_vertex"],THREE.ShaderChunk["envmap_pars_vertex"],THREE.ShaderChunk["lights_lambert_pars_vertex"],THREE.ShaderChunk["color_pars_vertex"],THREE.ShaderChunk["morphtarget_pars_vertex"],THREE.ShaderChunk["skinning_pars_vertex"],THREE.ShaderChunk["shadowmap_pars_vertex"],THREE.ShaderChunk["logdepthbuf_pars_vertex"],"void main() {",THREE.ShaderChunk["uv_vertex"],THREE.ShaderChunk["uv2_vertex"],THREE.ShaderChunk["color_vertex"],THREE.ShaderChunk["beginnormal_vertex"],THREE.ShaderChunk["morphnormal_vertex"],THREE.ShaderChunk["skinbase_vertex"],THREE.ShaderChunk["skinnormal_vertex"],THREE.ShaderChunk["defaultnormal_vertex"],THREE.ShaderChunk["begin_vertex"],THREE.ShaderChunk["morphtarget_vertex"],THREE.ShaderChunk["skinning_vertex"],THREE.ShaderChunk["project_vertex"],THREE.ShaderChunk["logdepthbuf_vertex"],THREE.ShaderChunk["worldpos_vertex"],THREE.ShaderChunk["envmap_vertex"],THREE.ShaderChunk["lights_lambert_vertex"],THREE.ShaderChunk["shadowmap_vertex"],"}"].join("\n"),fragmentShader:["uniform vec3 diffuse;","uniform vec3 emissive;","uniform float opacity;","uniform vec3 ambientLightColor;","varying vec3 vLightFront;","#ifdef DOUBLE_SIDED","	varying vec3 vLightBack;","#endif",THREE.ShaderChunk["common"],THREE.ShaderChunk["color_pars_fragment"],THREE.ShaderChunk["uv_pars_fragment"],THREE.ShaderChunk["uv2_pars_fragment"],THREE.ShaderChunk["map_pars_fragment"],THREE.ShaderChunk["alphamap_pars_fragment"],THREE.ShaderChunk["envmap_pars_fragment"],THREE.ShaderChunk["fog_pars_fragment"],THREE.ShaderChunk["shadowmap_pars_fragment"],THREE.ShaderChunk["specularmap_pars_fragment"],THREE.ShaderChunk["logdepthbuf_pars_fragment"],"void main() {","	vec3 outgoingLight = vec3( 0.0 );","	vec4 diffuseColor = vec4( diffuse, opacity );","	vec3 totalAmbientLight = ambientLightColor;","	vec3 shadowMask = vec3( 1.0 );",THREE.ShaderChunk["logdepthbuf_fragment"],THREE.ShaderChunk["map_fragment"],THREE.ShaderChunk["color_fragment"],THREE.ShaderChunk["alphamap_fragment"],THREE.ShaderChunk["alphatest_fragment"],THREE.ShaderChunk["specularmap_fragment"],THREE.ShaderChunk["shadowmap_fragment"],"	#ifdef DOUBLE_SIDED","		if ( gl_FrontFacing )","			outgoingLight += diffuseColor.rgb * ( vLightFront * shadowMask + totalAmbientLight ) + emissive;","		else","			outgoingLight += diffuseColor.rgb * ( vLightBack * shadowMask + totalAmbientLight ) + emissive;","	#else","		outgoingLight += diffuseColor.rgb * ( vLightFront * shadowMask + totalAmbientLight ) + emissive;","	#endif",THREE.ShaderChunk["envmap_fragment"],THREE.ShaderChunk["linear_to_gamma_fragment"],THREE.ShaderChunk["fog_fragment"],"	gl_FragColor = vec4( outgoingLight, diffuseColor.a );","}"].join("\n")
        },phong:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib["common"],THREE.UniformsLib["aomap"],THREE.UniformsLib["lightmap"],THREE.UniformsLib["emissivemap"],THREE.UniformsLib["bumpmap"],THREE.UniformsLib["normalmap"],THREE.UniformsLib["displacementmap"],THREE.UniformsLib["fog"],THREE.UniformsLib["lights"],THREE.UniformsLib["shadowmap"],{emissive:{type:"c",value:new THREE.Color(0)},specular:{type:"c",value:new THREE.Color(1118481)},shininess:{type:"f",value:30}}]),vertexShader:["#define PHONG","varying vec3 vViewPosition;","#ifndef FLAT_SHADED","	varying vec3 vNormal;","#endif",THREE.ShaderChunk["common"],THREE.ShaderChunk["uv_pars_vertex"],THREE.ShaderChunk["uv2_pars_vertex"],THREE.ShaderChunk["displacementmap_pars_vertex"],THREE.ShaderChunk["envmap_pars_vertex"],THREE.ShaderChunk["lights_phong_pars_vertex"],THREE.ShaderChunk["color_pars_vertex"],THREE.ShaderChunk["morphtarget_pars_vertex"],THREE.ShaderChunk["skinning_pars_vertex"],THREE.ShaderChunk["shadowmap_pars_vertex"],THREE.ShaderChunk["logdepthbuf_pars_vertex"],"void main() {",THREE.ShaderChunk["uv_vertex"],THREE.ShaderChunk["uv2_vertex"],THREE.ShaderChunk["color_vertex"],THREE.ShaderChunk["beginnormal_vertex"],THREE.ShaderChunk["morphnormal_vertex"],THREE.ShaderChunk["skinbase_vertex"],THREE.ShaderChunk["skinnormal_vertex"],THREE.ShaderChunk["defaultnormal_vertex"],"#ifndef FLAT_SHADED","	vNormal = normalize( transformedNormal );","#endif",THREE.ShaderChunk["begin_vertex"],THREE.ShaderChunk["displacementmap_vertex"],THREE.ShaderChunk["morphtarget_vertex"],THREE.ShaderChunk["skinning_vertex"],THREE.ShaderChunk["project_vertex"],THREE.ShaderChunk["logdepthbuf_vertex"],"	vViewPosition = - mvPosition.xyz;",THREE.ShaderChunk["worldpos_vertex"],THREE.ShaderChunk["envmap_vertex"],THREE.ShaderChunk["lights_phong_vertex"],THREE.ShaderChunk["shadowmap_vertex"],"}"].join("\n"),fragmentShader:["#define PHONG","uniform vec3 diffuse;","uniform vec3 emissive;","uniform vec3 specular;","uniform float shininess;","uniform float opacity;",THREE.ShaderChunk["common"],THREE.ShaderChunk["color_pars_fragment"],THREE.ShaderChunk["uv_pars_fragment"],THREE.ShaderChunk["uv2_pars_fragment"],THREE.ShaderChunk["map_pars_fragment"],THREE.ShaderChunk["alphamap_pars_fragment"],THREE.ShaderChunk["aomap_pars_fragment"],THREE.ShaderChunk["lightmap_pars_fragment"],THREE.ShaderChunk["emissivemap_pars_fragment"],THREE.ShaderChunk["envmap_pars_fragment"],THREE.ShaderChunk["fog_pars_fragment"],THREE.ShaderChunk["lights_phong_pars_fragment"],THREE.ShaderChunk["shadowmap_pars_fragment"],THREE.ShaderChunk["bumpmap_pars_fragment"],THREE.ShaderChunk["normalmap_pars_fragment"],THREE.ShaderChunk["specularmap_pars_fragment"],THREE.ShaderChunk["logdepthbuf_pars_fragment"],"void main() {","	vec3 outgoingLight = vec3( 0.0 );","	vec4 diffuseColor = vec4( diffuse, opacity );","	vec3 totalAmbientLight = ambientLightColor;","	vec3 totalEmissiveLight = emissive;","	vec3 shadowMask = vec3( 1.0 );",THREE.ShaderChunk["logdepthbuf_fragment"],THREE.ShaderChunk["map_fragment"],THREE.ShaderChunk["color_fragment"],THREE.ShaderChunk["alphamap_fragment"],THREE.ShaderChunk["alphatest_fragment"],THREE.ShaderChunk["specularmap_fragment"],THREE.ShaderChunk["normal_phong_fragment"],THREE.ShaderChunk["lightmap_fragment"],THREE.ShaderChunk["hemilight_fragment"],THREE.ShaderChunk["aomap_fragment"],THREE.ShaderChunk["emissivemap_fragment"],THREE.ShaderChunk["lights_phong_fragment"],THREE.ShaderChunk["shadowmap_fragment"],"totalDiffuseLight *= shadowMask;","totalSpecularLight *= shadowMask;","#ifdef METAL","	outgoingLight += diffuseColor.rgb * ( totalDiffuseLight + totalAmbientLight ) * specular + totalSpecularLight + totalEmissiveLight;","#else","	outgoingLight += diffuseColor.rgb * ( totalDiffuseLight + totalAmbientLight ) + totalSpecularLight + totalEmissiveLight;","#endif",THREE.ShaderChunk["envmap_fragment"],THREE.ShaderChunk["linear_to_gamma_fragment"],THREE.ShaderChunk["fog_fragment"],"	gl_FragColor = vec4( outgoingLight, diffuseColor.a );","}"].join("\n")},points:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib["points"],THREE.UniformsLib["shadowmap"]]),vertexShader:["uniform float size;","uniform float scale;",THREE.ShaderChunk["common"],THREE.ShaderChunk["color_pars_vertex"],THREE.ShaderChunk["shadowmap_pars_vertex"],THREE.ShaderChunk["logdepthbuf_pars_vertex"],"void main() {",THREE.ShaderChunk["color_vertex"],"	vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );","	#ifdef USE_SIZEATTENUATION","		gl_PointSize = size * ( scale / length( mvPosition.xyz ) );","	#else","		gl_PointSize = size;","	#endif","	gl_Position = projectionMatrix * mvPosition;",THREE.ShaderChunk["logdepthbuf_vertex"],THREE.ShaderChunk["worldpos_vertex"],THREE.ShaderChunk["shadowmap_vertex"],"}"].join("\n"),fragmentShader:["uniform vec3 psColor;","uniform float opacity;",THREE.ShaderChunk["common"],THREE.ShaderChunk["color_pars_fragment"],THREE.ShaderChunk["map_particle_pars_fragment"],THREE.ShaderChunk["fog_pars_fragment"],THREE.ShaderChunk["shadowmap_pars_fragment"],THREE.ShaderChunk["logdepthbuf_pars_fragment"],"void main() {","	vec3 outgoingLight = vec3( 0.0 );","	vec4 diffuseColor = vec4( psColor, opacity );","	vec3 shadowMask = vec3( 1.0 );",THREE.ShaderChunk["logdepthbuf_fragment"],THREE.ShaderChunk["map_particle_fragment"],THREE.ShaderChunk["color_fragment"],THREE.ShaderChunk["alphatest_fragment"],THREE.ShaderChunk["shadowmap_fragment"],"	outgoingLight = diffuseColor.rgb * shadowMask;",THREE.ShaderChunk["fog_fragment"],"	gl_FragColor = vec4( outgoingLight, diffuseColor.a );","}"].join("\n")},dashed:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib["common"],THREE.UniformsLib["fog"],{scale:{type:"f",value:1},dashSize:{type:"f",value:1},totalSize:{type:"f",value:2}}]),vertexShader:["uniform float scale;","attribute float lineDistance;","varying float vLineDistance;",THREE.ShaderChunk["common"],THREE.ShaderChunk["color_pars_vertex"],THREE.ShaderChunk["logdepthbuf_pars_vertex"],"void main() {",THREE.ShaderChunk["color_vertex"],"	vLineDistance = scale * lineDistance;","	vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );","	gl_Position = projectionMatrix * mvPosition;",THREE.ShaderChunk["logdepthbuf_vertex"],"}"].join("\n"),fragmentShader:["uniform vec3 diffuse;","uniform float opacity;","uniform float dashSize;","uniform float totalSize;","varying float vLineDistance;",THREE.ShaderChunk["common"],THREE.ShaderChunk["color_pars_fragment"],THREE.ShaderChunk["fog_pars_fragment"],THREE.ShaderChunk["logdepthbuf_pars_fragment"],"void main() {","	if ( mod( vLineDistance, totalSize ) > dashSize ) {","		discard;","	}","	vec3 outgoingLight = vec3( 0.0 );","	vec4 diffuseColor = vec4( diffuse, opacity );",THREE.ShaderChunk["logdepthbuf_fragment"],THREE.ShaderChunk["color_fragment"],"	outgoingLight = diffuseColor.rgb;",THREE.ShaderChunk["fog_fragment"],"	gl_FragColor = vec4( outgoingLight, diffuseColor.a );","}"].join("\n")},depth:{uniforms:{mNear:{type:"f",value:1},mFar:{type:"f",value:2e3},opacity:{type:"f",value:1}},vertexShader:[THREE.ShaderChunk["common"],THREE.ShaderChunk["morphtarget_pars_vertex"],THREE.ShaderChunk["logdepthbuf_pars_vertex"],"void main() {",THREE.ShaderChunk["begin_vertex"],THREE.ShaderChunk["morphtarget_vertex"],THREE.ShaderChunk["project_vertex"],THREE.ShaderChunk["logdepthbuf_vertex"],"}"].join("\n"),fragmentShader:["uniform float mNear;","uniform float mFar;","uniform float opacity;",THREE.ShaderChunk["common"],THREE.ShaderChunk["logdepthbuf_pars_fragment"],"void main() {",THREE.ShaderChunk["logdepthbuf_fragment"],"	#ifdef USE_LOGDEPTHBUF_EXT","		float depth = gl_FragDepthEXT / gl_FragCoord.w;","	#else","		float depth = gl_FragCoord.z / gl_FragCoord.w;","	#endif","	float color = 1.0 - smoothstep( mNear, mFar, depth );","	gl_FragColor = vec4( vec3( color ), opacity );","}"].join("\n")},normal:{uniforms:{opacity:{type:"f",value:1}},vertexShader:["varying vec3 vNormal;",THREE.ShaderChunk["common"],THREE.ShaderChunk["morphtarget_pars_vertex"],THREE.ShaderChunk["logdepthbuf_pars_vertex"],"void main() {","	vNormal = normalize( normalMatrix * normal );",THREE.ShaderChunk["begin_vertex"],THREE.ShaderChunk["morphtarget_vertex"],THREE.ShaderChunk["project_vertex"],THREE.ShaderChunk["logdepthbuf_vertex"],"}"].join("\n"),fragmentShader:["uniform float opacity;","varying vec3 vNormal;",THREE.ShaderChunk["common"],THREE.ShaderChunk["logdepthbuf_pars_fragment"],"void main() {","	gl_FragColor = vec4( 0.5 * normalize( vNormal ) + 0.5, opacity );",THREE.ShaderChunk["logdepthbuf_fragment"],"}"].join("\n")},cube:{uniforms:{tCube:{type:"t",value:null},tFlip:{type:"f",value:-1}},vertexShader:["varying vec3 vWorldPosition;",THREE.ShaderChunk["common"],THREE.ShaderChunk["logdepthbuf_pars_vertex"],"void main() {","	vWorldPosition = transformDirection( position, modelMatrix );","	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",THREE.ShaderChunk["logdepthbuf_vertex"],"}"].join("\n"),fragmentShader:["uniform samplerCube tCube;","uniform float tFlip;","varying vec3 vWorldPosition;",THREE.ShaderChunk["common"],THREE.ShaderChunk["logdepthbuf_pars_fragment"],"void main() {","	gl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );",THREE.ShaderChunk["logdepthbuf_fragment"],"}"].join("\n")},equirect:{uniforms:{tEquirect:{type:"t",value:null},tFlip:{type:"f",value:-1}},vertexShader:["varying vec3 vWorldPosition;",THREE.ShaderChunk["common"],THREE.ShaderChunk["logdepthbuf_pars_vertex"],"void main() {","	vWorldPosition = transformDirection( position, modelMatrix );","	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",THREE.ShaderChunk["logdepthbuf_vertex"],"}"].join("\n"),fragmentShader:["uniform sampler2D tEquirect;","uniform float tFlip;","varying vec3 vWorldPosition;",THREE.ShaderChunk["common"],THREE.ShaderChunk["logdepthbuf_pars_fragment"],"void main() {","vec3 direction = normalize( vWorldPosition );","vec2 sampleUV;","sampleUV.y = saturate( tFlip * direction.y * -0.5 + 0.5 );","sampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;","gl_FragColor = texture2D( tEquirect, sampleUV );",THREE.ShaderChunk["logdepthbuf_fragment"],"}"].join("\n")},depthRGBA:{uniforms:{},vertexShader:[THREE.ShaderChunk["common"],THREE.ShaderChunk["morphtarget_pars_vertex"],THREE.ShaderChunk["skinning_pars_vertex"],THREE.ShaderChunk["logdepthbuf_pars_vertex"],"void main() {",THREE.ShaderChunk["skinbase_vertex"],THREE.ShaderChunk["begin_vertex"],THREE.ShaderChunk["morphtarget_vertex"],THREE.ShaderChunk["skinning_vertex"],THREE.ShaderChunk["project_vertex"],THREE.ShaderChunk["logdepthbuf_vertex"],"}"].join("\n"),fragmentShader:[THREE.ShaderChunk["common"],THREE.ShaderChunk["logdepthbuf_pars_fragment"],"vec4 pack_depth( const in float depth ) {","	const vec4 bit_shift = vec4( 256.0 * 256.0 * 256.0, 256.0 * 256.0, 256.0, 1.0 );","	const vec4 bit_mask = vec4( 0.0, 1.0 / 256.0, 1.0 / 256.0, 1.0 / 256.0 );","	vec4 res = mod( depth * bit_shift * vec4( 255 ), vec4( 256 ) ) / vec4( 255 );","	res -= res.xxyz * bit_mask;","	return res;","}","void main() {",THREE.ShaderChunk["logdepthbuf_fragment"],"	#ifdef USE_LOGDEPTHBUF_EXT","		gl_FragData[ 0 ] = pack_depth( gl_FragDepthEXT );","	#else","		gl_FragData[ 0 ] = pack_depth( gl_FragCoord.z );","	#endif","}"].join("\n")},distanceRGBA:{uniforms:{lightPos:{type:"v3",value:new THREE.Vector3(0,0,0)}},vertexShader:["varying vec4 vWorldPosition;",THREE.ShaderChunk["common"],THREE.ShaderChunk["morphtarget_pars_vertex"],THREE.ShaderChunk["skinning_pars_vertex"],"void main() {",THREE.ShaderChunk["skinbase_vertex"],THREE.ShaderChunk["begin_vertex"],THREE.ShaderChunk["morphtarget_vertex"],THREE.ShaderChunk["skinning_vertex"],THREE.ShaderChunk["project_vertex"],THREE.ShaderChunk["worldpos_vertex"],"vWorldPosition = worldPosition;","}"].join("\n"),fragmentShader:["uniform vec3 lightPos;","varying vec4 vWorldPosition;",THREE.ShaderChunk["common"],"vec4 pack1K ( float depth ) {","   depth /= 1000.0;","   const vec4 bitSh = vec4( 256.0 * 256.0 * 256.0, 256.0 * 256.0, 256.0, 1.0 );","	const vec4 bitMsk = vec4( 0.0, 1.0 / 256.0, 1.0 / 256.0, 1.0 / 256.0 );","	vec4 res = fract( depth * bitSh );","	res -= res.xxyz * bitMsk;","	return res; ","}","float unpack1K ( vec4 color ) {","	const vec4 bitSh = vec4( 1.0 / ( 256.0 * 256.0 * 256.0 ), 1.0 / ( 256.0 * 256.0 ), 1.0 / 256.0, 1.0 );","	return dot( color, bitSh ) * 1000.0;","}","void main () {","	gl_FragColor = pack1K( length( vWorldPosition.xyz - lightPos.xyz ) );","}"].join("\n")}};THREE.WebGLRenderer=function(parameters){console.log("THREE.WebGLRenderer",THREE.REVISION);parameters=parameters||{};var _canvas=parameters.canvas!==undefined?parameters.canvas:document.createElement("canvas"),_context=parameters.context!==undefined?parameters.context:null,_width=_canvas.width,_height=_canvas.height,pixelRatio=1,_alpha=parameters.alpha!==undefined?parameters.alpha:false,_depth=parameters.depth!==undefined?parameters.depth:true,_stencil=parameters.stencil!==undefined?parameters.stencil:true,_antialias=parameters.antialias!==undefined?parameters.antialias:false,_premultipliedAlpha=parameters.premultipliedAlpha!==undefined?parameters.premultipliedAlpha:true,_preserveDrawingBuffer=parameters.preserveDrawingBuffer!==undefined?parameters.preserveDrawingBuffer:false,_clearColor=new THREE.Color(0),_clearAlpha=0;var lights=[];var opaqueObjects=[];var opaqueObjectsLastIndex=-1;var transparentObjects=[];var transparentObjectsLastIndex=-1;var morphInfluences=new Float32Array(8);var sprites=[];var lensFlares=[];this.domElement=_canvas;this.context=null;this.autoClear=true;this.autoClearColor=true;this.autoClearDepth=true;this.autoClearStencil=true;this.sortObjects=true;this.gammaFactor=2;this.gammaInput=false;this.gammaOutput=false;this.maxMorphTargets=8;this.maxMorphNormals=4;this.autoScaleCubemaps=true;var _this=this,_currentProgram=null,_currentFramebuffer=null,_currentMaterialId=-1,_currentGeometryProgram="",_currentCamera=null,_usedTextureUnits=0,_viewportX=0,_viewportY=0,_viewportWidth=_canvas.width,_viewportHeight=_canvas.height,_currentWidth=0,_currentHeight=0,_frustum=new THREE.Frustum,_projScreenMatrix=new THREE.Matrix4,_vector3=new THREE.Vector3,_direction=new THREE.Vector3,_lightsNeedUpdate=true,_lights={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[],decays:[]},spot:{length:0,colors:[],positions:[],distances:[],directions:[],anglesCos:[],exponents:[],decays:[]},hemi:{length:0,skyColors:[],groundColors:[],positions:[]}},_infoMemory={geometries:0,textures:0},_infoRender={calls:0,vertices:0,faces:0,points:0};this.info={render:_infoRender,memory:_infoMemory,programs:null};var _gl;try{var attributes={alpha:_alpha,depth:_depth,stencil:_stencil,antialias:_antialias,premultipliedAlpha:_premultipliedAlpha,preserveDrawingBuffer:_preserveDrawingBuffer};_gl=_context||_canvas.getContext("webgl",attributes)||_canvas.getContext("experimental-webgl",attributes);if(_gl===null){if(_canvas.getContext("webgl")!==null){throw"Error creating WebGL context with your selected attributes."}else{throw"Error creating WebGL context."}}_canvas.addEventListener("webglcontextlost",onContextLost,false)}catch(error){console.error("THREE.WebGLRenderer: "+error)}var extensions=new THREE.WebGLExtensions(_gl);extensions.get("OES_texture_float");extensions.get("OES_texture_float_linear");extensions.get("OES_texture_half_float");extensions.get("OES_texture_half_float_linear");extensions.get("OES_standard_derivatives");extensions.get("ANGLE_instanced_arrays");if(extensions.get("OES_element_index_uint")){THREE.BufferGeometry.MaxIndex=4294967296}var capabilities=new THREE.WebGLCapabilities(_gl,extensions,parameters);var state=new THREE.WebGLState(_gl,extensions,paramThreeToGL);var properties=new THREE.WebGLProperties;var objects=new THREE.WebGLObjects(_gl,properties,this.info);var programCache=new THREE.WebGLPrograms(this,capabilities);this.info.programs=programCache.programs;var bufferRenderer=new THREE.WebGLBufferRenderer(_gl,extensions,_infoRender);var indexedBufferRenderer=new THREE.WebGLIndexedBufferRenderer(_gl,extensions,_infoRender);function glClearColor(r,g,b,a){if(_premultipliedAlpha===true){r*=a;g*=a;b*=a}_gl.clearColor(r,g,b,a)}function setDefaultGLState(){state.init();_gl.viewport(_viewportX,_viewportY,_viewportWidth,_viewportHeight);glClearColor(_clearColor.r,_clearColor.g,_clearColor.b,_clearAlpha)}function resetGLState(){_currentProgram=null;_currentCamera=null;_currentGeometryProgram="";_currentMaterialId=-1;_lightsNeedUpdate=true;state.reset()}setDefaultGLState();this.context=_gl;this.capabilities=capabilities;this.extensions=extensions;this.state=state;var shadowMap=new THREE.WebGLShadowMap(this,lights,objects);this.shadowMap=shadowMap;var spritePlugin=new THREE.SpritePlugin(this,sprites);var lensFlarePlugin=new THREE.LensFlarePlugin(this,lensFlares);this.getContext=function(){return _gl};this.getContextAttributes=function(){return _gl.getContextAttributes()};this.forceContextLoss=function(){extensions.get("WEBGL_lose_context").loseContext()};this.getMaxAnisotropy=function(){var value;return function getMaxAnisotropy(){if(value!==undefined)return value;var extension=extensions.get("EXT_texture_filter_anisotropic");if(extension!==null){value=_gl.getParameter(extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else{value=0}return value}}();this.getPrecision=function(){return capabilities.precision};this.getPixelRatio=function(){return pixelRatio};this.setPixelRatio=function(value){if(value!==undefined)pixelRatio=value};this.getSize=function(){return{width:_width,height:_height}};this.setSize=function(width,height,updateStyle){_width=width;_height=height;_canvas.width=width*pixelRatio;_canvas.height=height*pixelRatio;if(updateStyle!==false){_canvas.style.width=width+"px";_canvas.style.height=height+"px"}this.setViewport(0,0,width,height)};this.setViewport=function(x,y,width,height){_viewportX=x*pixelRatio;_viewportY=y*pixelRatio;_viewportWidth=width*pixelRatio;_viewportHeight=height*pixelRatio;_gl.viewport(_viewportX,_viewportY,_viewportWidth,_viewportHeight)};this.getViewport=function(dimensions){dimensions.x=_viewportX/pixelRatio;dimensions.y=_viewportY/pixelRatio;dimensions.z=_viewportWidth/pixelRatio;dimensions.w=_viewportHeight/pixelRatio};this.setScissor=function(x,y,width,height){_gl.scissor(x*pixelRatio,y*pixelRatio,width*pixelRatio,height*pixelRatio)};this.enableScissorTest=function(boolean){state.setScissorTest(boolean)};this.getClearColor=function(){return _clearColor};this.setClearColor=function(color,alpha){_clearColor.set(color);_clearAlpha=alpha!==undefined?alpha:1;glClearColor(_clearColor.r,_clearColor.g,_clearColor.b,_clearAlpha)};this.getClearAlpha=function(){return _clearAlpha};this.setClearAlpha=function(alpha){_clearAlpha=alpha;glClearColor(_clearColor.r,_clearColor.g,_clearColor.b,_clearAlpha)};this.clear=function(color,depth,stencil){var bits=0;if(color===undefined||color)bits|=_gl.COLOR_BUFFER_BIT;if(depth===undefined||depth)bits|=_gl.DEPTH_BUFFER_BIT;if(stencil===undefined||stencil)bits|=_gl.STENCIL_BUFFER_BIT;_gl.clear(bits)};this.clearColor=function(){_gl.clear(_gl.COLOR_BUFFER_BIT)};this.clearDepth=function(){_gl.clear(_gl.DEPTH_BUFFER_BIT)};this.clearStencil=function(){_gl.clear(_gl.STENCIL_BUFFER_BIT)};this.clearTarget=function(renderTarget,color,depth,stencil){this.setRenderTarget(renderTarget);this.clear(color,depth,stencil)};this.resetGLState=resetGLState;this.dispose=function(){_canvas.removeEventListener("webglcontextlost",onContextLost,false)};function onContextLost(event){event.preventDefault();resetGLState();setDefaultGLState();properties.clear()}function onTextureDispose(event){var texture=event.target;texture.removeEventListener("dispose",onTextureDispose);deallocateTexture(texture);_infoMemory.textures--}function onRenderTargetDispose(event){var renderTarget=event.target;renderTarget.removeEventListener("dispose",onRenderTargetDispose);deallocateRenderTarget(renderTarget);_infoMemory.textures--}function onMaterialDispose(event){var material=event.target;material.removeEventListener("dispose",onMaterialDispose);deallocateMaterial(material)}function deallocateTexture(texture){var textureProperties=properties.get(texture);if(texture.image&&textureProperties.__image__webglTextureCube){_gl.deleteTexture(textureProperties.__image__webglTextureCube)}else{if(textureProperties.__webglInit===undefined)return;_gl.deleteTexture(textureProperties.__webglTexture)}properties.delete(texture)}function deallocateRenderTarget(renderTarget){var renderTargetProperties=properties.get(renderTarget);var textureProperties=properties.get(renderTarget.texture);if(!renderTarget||textureProperties.__webglTexture===undefined)return;_gl.deleteTexture(textureProperties.__webglTexture);if(renderTarget instanceof THREE.WebGLRenderTargetCube){for(var i=0;i<6;i++){_gl.deleteFramebuffer(renderTargetProperties.__webglFramebuffer[i]);_gl.deleteRenderbuffer(renderTargetProperties.__webglRenderbuffer[i])}}else{_gl.deleteFramebuffer(renderTargetProperties.__webglFramebuffer);_gl.deleteRenderbuffer(renderTargetProperties.__webglRenderbuffer)}properties.delete(renderTarget.texture);properties.delete(renderTarget)}function deallocateMaterial(material){releaseMaterialProgramReference(material);properties.delete(material)}function releaseMaterialProgramReference(material){var programInfo=properties.get(material).program;material.program=undefined;if(programInfo!==undefined){programCache.releaseProgram(programInfo)}}this.renderBufferImmediate=function(object,program,material){state.initAttributes();var buffers=properties.get(object);if(object.hasPositions&&!buffers.position)buffers.position=_gl.createBuffer();if(object.hasNormals&&!buffers.normal)buffers.normal=_gl.createBuffer();if(object.hasUvs&&!buffers.uv)buffers.uv=_gl.createBuffer();if(object.hasColors&&!buffers.color)buffers.color=_gl.createBuffer();var attributes=program.getAttributes();if(object.hasPositions){_gl.bindBuffer(_gl.ARRAY_BUFFER,buffers.position);_gl.bufferData(_gl.ARRAY_BUFFER,object.positionArray,_gl.DYNAMIC_DRAW);state.enableAttribute(attributes.position);_gl.vertexAttribPointer(attributes.position,3,_gl.FLOAT,false,0,0)}if(object.hasNormals){_gl.bindBuffer(_gl.ARRAY_BUFFER,buffers.normal);if(material.type!=="MeshPhongMaterial"&&material.shading===THREE.FlatShading){for(var i=0,l=object.count*3;i<l;i+=9){var array=object.normalArray;var nx=(array[i+0]+array[i+3]+array[i+6])/3;var ny=(array[i+1]+array[i+4]+array[i+7])/3;var nz=(array[i+2]+array[i+5]+array[i+8])/3;array[i+0]=nx;array[i+1]=ny;array[i+2]=nz;array[i+3]=nx;array[i+4]=ny;array[i+5]=nz;array[i+6]=nx;array[i+7]=ny;array[i+8]=nz}}_gl.bufferData(_gl.ARRAY_BUFFER,object.normalArray,_gl.DYNAMIC_DRAW);state.enableAttribute(attributes.normal);_gl.vertexAttribPointer(attributes.normal,3,_gl.FLOAT,false,0,0)}if(object.hasUvs&&material.map){_gl.bindBuffer(_gl.ARRAY_BUFFER,buffers.uv);_gl.bufferData(_gl.ARRAY_BUFFER,object.uvArray,_gl.DYNAMIC_DRAW);state.enableAttribute(attributes.uv);_gl.vertexAttribPointer(attributes.uv,2,_gl.FLOAT,false,0,0)}if(object.hasColors&&material.vertexColors!==THREE.NoColors){_gl.bindBuffer(_gl.ARRAY_BUFFER,buffers.color);_gl.bufferData(_gl.ARRAY_BUFFER,object.colorArray,_gl.DYNAMIC_DRAW);state.enableAttribute(attributes.color);_gl.vertexAttribPointer(attributes.color,3,_gl.FLOAT,false,0,0)}state.disableUnusedAttributes();_gl.drawArrays(_gl.TRIANGLES,0,object.count);object.count=0};this.renderBufferDirect=function(camera,lights,fog,geometry,material,object,group){setMaterial(material);var program=setProgram(camera,lights,fog,material,object);var updateBuffers=false;var geometryProgram=geometry.id+"_"+program.id+"_"+material.wireframe;if(geometryProgram!==_currentGeometryProgram){_currentGeometryProgram=geometryProgram;updateBuffers=true}var morphTargetInfluences=object.morphTargetInfluences;if(morphTargetInfluences!==undefined){var activeInfluences=[];for(var i=0,l=morphTargetInfluences.length;i<l;i++){var influence=morphTargetInfluences[i];activeInfluences.push([influence,i])}activeInfluences.sort(numericalSort);if(activeInfluences.length>8){activeInfluences.length=8}var morphAttributes=geometry.morphAttributes;for(var i=0,l=activeInfluences.length;i<l;i++){var influence=activeInfluences[i];morphInfluences[i]=influence[0];if(influence[0]!==0){var index=influence[1];if(material.morphTargets===true&&morphAttributes.position)geometry.addAttribute("morphTarget"+i,morphAttributes.position[index]);if(material.morphNormals===true&&morphAttributes.normal)geometry.addAttribute("morphNormal"+i,morphAttributes.normal[index])}else{if(material.morphTargets===true)geometry.removeAttribute("morphTarget"+i);if(material.morphNormals===true)geometry.removeAttribute("morphNormal"+i)}}var uniforms=program.getUniforms();if(uniforms.morphTargetInfluences!==null){_gl.uniform1fv(uniforms.morphTargetInfluences,morphInfluences)}updateBuffers=true}var index=geometry.index;var position=geometry.attributes.position;if(material.wireframe===true){index=objects.getWireframeAttribute(geometry)}var renderer;if(index!==null){renderer=indexedBufferRenderer;renderer.setIndex(index)}else{renderer=bufferRenderer}if(updateBuffers){setupVertexAttributes(material,program,geometry);if(index!==null){_gl.bindBuffer(_gl.ELEMENT_ARRAY_BUFFER,objects.getAttributeBuffer(index))}}var dataStart=0;var dataCount=Infinity;if(index!==null){dataCount=index.count}else if(position!==undefined){dataCount=position.count}var rangeStart=geometry.drawRange.start;var rangeCount=geometry.drawRange.count;var groupStart=group!==null?group.start:0;var groupCount=group!==null?group.count:Infinity;var drawStart=Math.max(dataStart,rangeStart,groupStart);var drawEnd=Math.min(dataStart+dataCount,rangeStart+rangeCount,groupStart+groupCount)-1;var drawCount=Math.max(0,drawEnd-drawStart+1);if(object instanceof THREE.Mesh){if(material.wireframe===true){state.setLineWidth(material.wireframeLinewidth*pixelRatio);renderer.setMode(_gl.LINES)}else{renderer.setMode(_gl.TRIANGLES)}if(geometry instanceof THREE.InstancedBufferGeometry&&geometry.maxInstancedCount>0){renderer.renderInstances(geometry)}else{renderer.render(drawStart,drawCount)}}else if(object instanceof THREE.Line){var lineWidth=material.linewidth;if(lineWidth===undefined)lineWidth=1;state.setLineWidth(lineWidth*pixelRatio);if(object instanceof THREE.LineSegments){renderer.setMode(_gl.LINES)}else{renderer.setMode(_gl.LINE_STRIP)}renderer.render(drawStart,drawCount)}else if(object instanceof THREE.Points){renderer.setMode(_gl.POINTS);renderer.render(drawStart,drawCount)}};function setupVertexAttributes(material,program,geometry,startIndex){var extension;if(geometry instanceof THREE.InstancedBufferGeometry){extension=extensions.get("ANGLE_instanced_arrays");if(extension===null){console.error("THREE.WebGLRenderer.setupVertexAttributes: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");return}}if(startIndex===undefined)startIndex=0;state.initAttributes();var geometryAttributes=geometry.attributes;var programAttributes=program.getAttributes();var materialDefaultAttributeValues=material.defaultAttributeValues;for(var name in programAttributes){var programAttribute=programAttributes[name];if(programAttribute>=0){var geometryAttribute=geometryAttributes[name];if(geometryAttribute!==undefined){var size=geometryAttribute.itemSize;var buffer=objects.getAttributeBuffer(geometryAttribute);if(geometryAttribute instanceof THREE.InterleavedBufferAttribute){var data=geometryAttribute.data;var stride=data.stride;var offset=geometryAttribute.offset;if(data instanceof THREE.InstancedInterleavedBuffer){state.enableAttributeAndDivisor(programAttribute,data.meshPerAttribute,extension);if(geometry.maxInstancedCount===undefined){geometry.maxInstancedCount=data.meshPerAttribute*data.count}}else{state.enableAttribute(programAttribute)}_gl.bindBuffer(_gl.ARRAY_BUFFER,buffer);_gl.vertexAttribPointer(programAttribute,size,_gl.FLOAT,false,stride*data.array.BYTES_PER_ELEMENT,(startIndex*stride+offset)*data.array.BYTES_PER_ELEMENT)}else{if(geometryAttribute instanceof THREE.InstancedBufferAttribute){state.enableAttributeAndDivisor(programAttribute,geometryAttribute.meshPerAttribute,extension);if(geometry.maxInstancedCount===undefined){geometry.maxInstancedCount=geometryAttribute.meshPerAttribute*geometryAttribute.count}}else{state.enableAttribute(programAttribute)}_gl.bindBuffer(_gl.ARRAY_BUFFER,buffer);_gl.vertexAttribPointer(programAttribute,size,_gl.FLOAT,false,0,startIndex*size*4)}}else if(materialDefaultAttributeValues!==undefined){var value=materialDefaultAttributeValues[name];if(value!==undefined){switch(value.length){case 2:_gl.vertexAttrib2fv(programAttribute,value);break;case 3:_gl.vertexAttrib3fv(programAttribute,value);break;case 4:_gl.vertexAttrib4fv(programAttribute,value);break;default:_gl.vertexAttrib1fv(programAttribute,value)}}}}}state.disableUnusedAttributes()}function numericalSort(a,b){return b[0]-a[0]}function painterSortStable(a,b){if(a.object.renderOrder!==b.object.renderOrder){return a.object.renderOrder-b.object.renderOrder}else if(a.material.id!==b.material.id){return a.material.id-b.material.id}else if(a.z!==b.z){return a.z-b.z}else{return a.id-b.id}}function reversePainterSortStable(a,b){if(a.object.renderOrder!==b.object.renderOrder){return a.object.renderOrder-b.object.renderOrder}if(a.z!==b.z){return b.z-a.z}else{return a.id-b.id}}this.render=function(scene,camera,renderTarget,forceClear){if(camera instanceof THREE.Camera===false){console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");return}var fog=scene.fog;_currentGeometryProgram="";_currentMaterialId=-1;_currentCamera=null;_lightsNeedUpdate=true;if(scene.autoUpdate===true)scene.updateMatrixWorld();if(camera.parent===null)camera.updateMatrixWorld();camera.matrixWorldInverse.getInverse(camera.matrixWorld);_projScreenMatrix.multiplyMatrices(camera.projectionMatrix,camera.matrixWorldInverse);_frustum.setFromMatrix(_projScreenMatrix);lights.length=0;opaqueObjectsLastIndex=-1;transparentObjectsLastIndex=-1;sprites.length=0;lensFlares.length=0;projectObject(scene,camera);opaqueObjects.length=opaqueObjectsLastIndex+1;transparentObjects.length=transparentObjectsLastIndex+1;if(_this.sortObjects===true){opaqueObjects.sort(painterSortStable);transparentObjects.sort(reversePainterSortStable)}shadowMap.render(scene);_infoRender.calls=0;_infoRender.vertices=0;_infoRender.faces=0;_infoRender.points=0;this.setRenderTarget(renderTarget);if(this.autoClear||forceClear){this.clear(this.autoClearColor,this.autoClearDepth,this.autoClearStencil)}if(scene.overrideMaterial){var overrideMaterial=scene.overrideMaterial;renderObjects(opaqueObjects,camera,lights,fog,overrideMaterial);renderObjects(transparentObjects,camera,lights,fog,overrideMaterial)}else{state.setBlending(THREE.NoBlending);renderObjects(opaqueObjects,camera,lights,fog);renderObjects(transparentObjects,camera,lights,fog)}spritePlugin.render(scene,camera);lensFlarePlugin.render(scene,camera,_currentWidth,_currentHeight);if(renderTarget){var texture=renderTarget.texture;var isTargetPowerOfTwo=isPowerOfTwo(renderTarget);if(texture.generateMipmaps&&isTargetPowerOfTwo&&texture.minFilter!==THREE.NearestFilter&&texture.minFilter!==THREE.LinearFilter){updateRenderTargetMipmap(renderTarget)}}state.setDepthTest(true);state.setDepthWrite(true);state.setColorWrite(true)};function pushRenderItem(object,geometry,material,z,group){var array,index;if(material.transparent){array=transparentObjects;index=++transparentObjectsLastIndex}else{array=opaqueObjects;index=++opaqueObjectsLastIndex}var renderItem=array[index];if(renderItem!==undefined){renderItem.id=object.id;renderItem.object=object;renderItem.geometry=geometry;renderItem.material=material;renderItem.z=_vector3.z;renderItem.group=group}else{renderItem={id:object.id,object:object,geometry:geometry,material:material,
            z:_vector3.z,group:group};array.push(renderItem)}}function projectObject(object,camera){if(object.visible===false)return;if((object.channels.mask&camera.channels.mask)!==0){if(object instanceof THREE.Light){lights.push(object)}else if(object instanceof THREE.Sprite){sprites.push(object)}else if(object instanceof THREE.LensFlare){lensFlares.push(object)}else if(object instanceof THREE.ImmediateRenderObject){if(_this.sortObjects===true){_vector3.setFromMatrixPosition(object.matrixWorld);_vector3.applyProjection(_projScreenMatrix)}pushRenderItem(object,null,object.material,_vector3.z,null)}else if(object instanceof THREE.Mesh||object instanceof THREE.Line||object instanceof THREE.Points){if(object instanceof THREE.SkinnedMesh){object.skeleton.update()}if(object.frustumCulled===false||_frustum.intersectsObject(object)===true){var material=object.material;if(material.visible===true){if(_this.sortObjects===true){_vector3.setFromMatrixPosition(object.matrixWorld);_vector3.applyProjection(_projScreenMatrix)}var geometry=objects.update(object);if(material instanceof THREE.MeshFaceMaterial){var groups=geometry.groups;var materials=material.materials;for(var i=0,l=groups.length;i<l;i++){var group=groups[i];var groupMaterial=materials[group.materialIndex];if(groupMaterial.visible===true){pushRenderItem(object,geometry,groupMaterial,_vector3.z,group)}}}else{pushRenderItem(object,geometry,material,_vector3.z,null)}}}}}var children=object.children;for(var i=0,l=children.length;i<l;i++){projectObject(children[i],camera)}}function renderObjects(renderList,camera,lights,fog,overrideMaterial){for(var i=0,l=renderList.length;i<l;i++){var renderItem=renderList[i];var object=renderItem.object;var geometry=renderItem.geometry;var material=overrideMaterial===undefined?renderItem.material:overrideMaterial;var group=renderItem.group;object.modelViewMatrix.multiplyMatrices(camera.matrixWorldInverse,object.matrixWorld);object.normalMatrix.getNormalMatrix(object.modelViewMatrix);if(object instanceof THREE.ImmediateRenderObject){setMaterial(material);var program=setProgram(camera,lights,fog,material,object);_currentGeometryProgram="";object.render(function(object){_this.renderBufferImmediate(object,program,material)})}else{_this.renderBufferDirect(camera,lights,fog,geometry,material,object,group)}}}function initMaterial(material,lights,fog,object){var materialProperties=properties.get(material);var parameters=programCache.getParameters(material,lights,fog,object);var code=programCache.getProgramCode(material,parameters);var program=materialProperties.program;var programChange=true;if(program===undefined){material.addEventListener("dispose",onMaterialDispose)}else if(program.code!==code){releaseMaterialProgramReference(material)}else if(parameters.shaderID!==undefined){return}else{programChange=false}if(programChange){if(parameters.shaderID){var shader=THREE.ShaderLib[parameters.shaderID];materialProperties.__webglShader={name:material.type,uniforms:THREE.UniformsUtils.clone(shader.uniforms),vertexShader:shader.vertexShader,fragmentShader:shader.fragmentShader}}else{materialProperties.__webglShader={name:material.type,uniforms:material.uniforms,vertexShader:material.vertexShader,fragmentShader:material.fragmentShader}}material.__webglShader=materialProperties.__webglShader;program=programCache.acquireProgram(material,parameters,code);materialProperties.program=program;material.program=program}var attributes=program.getAttributes();if(material.morphTargets){material.numSupportedMorphTargets=0;for(var i=0;i<_this.maxMorphTargets;i++){if(attributes["morphTarget"+i]>=0){material.numSupportedMorphTargets++}}}if(material.morphNormals){material.numSupportedMorphNormals=0;for(i=0;i<_this.maxMorphNormals;i++){if(attributes["morphNormal"+i]>=0){material.numSupportedMorphNormals++}}}materialProperties.uniformsList=[];var uniformLocations=materialProperties.program.getUniforms();for(var u in materialProperties.__webglShader.uniforms){var location=uniformLocations[u];if(location){materialProperties.uniformsList.push([materialProperties.__webglShader.uniforms[u],location])}}}function setMaterial(material){setMaterialFaces(material);if(material.transparent===true){state.setBlending(material.blending,material.blendEquation,material.blendSrc,material.blendDst,material.blendEquationAlpha,material.blendSrcAlpha,material.blendDstAlpha)}else{state.setBlending(THREE.NoBlending)}state.setDepthFunc(material.depthFunc);state.setDepthTest(material.depthTest);state.setDepthWrite(material.depthWrite);state.setColorWrite(material.colorWrite);state.setPolygonOffset(material.polygonOffset,material.polygonOffsetFactor,material.polygonOffsetUnits)}function setMaterialFaces(material){material.side!==THREE.DoubleSide?state.enable(_gl.CULL_FACE):state.disable(_gl.CULL_FACE);state.setFlipSided(material.side===THREE.BackSide)}function setProgram(camera,lights,fog,material,object){_usedTextureUnits=0;var materialProperties=properties.get(material);if(material.needsUpdate||!materialProperties.program){initMaterial(material,lights,fog,object);material.needsUpdate=false}var refreshProgram=false;var refreshMaterial=false;var refreshLights=false;var program=materialProperties.program,p_uniforms=program.getUniforms(),m_uniforms=materialProperties.__webglShader.uniforms;if(program.id!==_currentProgram){_gl.useProgram(program.program);_currentProgram=program.id;refreshProgram=true;refreshMaterial=true;refreshLights=true}if(material.id!==_currentMaterialId){if(_currentMaterialId===-1)refreshLights=true;_currentMaterialId=material.id;refreshMaterial=true}if(refreshProgram||camera!==_currentCamera){_gl.uniformMatrix4fv(p_uniforms.projectionMatrix,false,camera.projectionMatrix.elements);if(capabilities.logarithmicDepthBuffer){_gl.uniform1f(p_uniforms.logDepthBufFC,2/(Math.log(camera.far+1)/Math.LN2))}if(camera!==_currentCamera)_currentCamera=camera;if(material instanceof THREE.ShaderMaterial||material instanceof THREE.MeshPhongMaterial||material.envMap){if(p_uniforms.cameraPosition!==undefined){_vector3.setFromMatrixPosition(camera.matrixWorld);_gl.uniform3f(p_uniforms.cameraPosition,_vector3.x,_vector3.y,_vector3.z)}}if(material instanceof THREE.MeshPhongMaterial||material instanceof THREE.MeshLambertMaterial||material instanceof THREE.MeshBasicMaterial||material instanceof THREE.ShaderMaterial||material.skinning){if(p_uniforms.viewMatrix!==undefined){_gl.uniformMatrix4fv(p_uniforms.viewMatrix,false,camera.matrixWorldInverse.elements)}}}if(material.skinning){if(object.bindMatrix&&p_uniforms.bindMatrix!==undefined){_gl.uniformMatrix4fv(p_uniforms.bindMatrix,false,object.bindMatrix.elements)}if(object.bindMatrixInverse&&p_uniforms.bindMatrixInverse!==undefined){_gl.uniformMatrix4fv(p_uniforms.bindMatrixInverse,false,object.bindMatrixInverse.elements)}if(capabilities.floatVertexTextures&&object.skeleton&&object.skeleton.useVertexTexture){if(p_uniforms.boneTexture!==undefined){var textureUnit=getTextureUnit();_gl.uniform1i(p_uniforms.boneTexture,textureUnit);_this.setTexture(object.skeleton.boneTexture,textureUnit)}if(p_uniforms.boneTextureWidth!==undefined){_gl.uniform1i(p_uniforms.boneTextureWidth,object.skeleton.boneTextureWidth)}if(p_uniforms.boneTextureHeight!==undefined){_gl.uniform1i(p_uniforms.boneTextureHeight,object.skeleton.boneTextureHeight)}}else if(object.skeleton&&object.skeleton.boneMatrices){if(p_uniforms.boneGlobalMatrices!==undefined){_gl.uniformMatrix4fv(p_uniforms.boneGlobalMatrices,false,object.skeleton.boneMatrices)}}}if(refreshMaterial){if(fog&&material.fog){refreshUniformsFog(m_uniforms,fog)}if(material instanceof THREE.MeshPhongMaterial||material instanceof THREE.MeshLambertMaterial||material.lights){if(_lightsNeedUpdate){refreshLights=true;setupLights(lights,camera);_lightsNeedUpdate=false}if(refreshLights){refreshUniformsLights(m_uniforms,_lights);markUniformsLightsNeedsUpdate(m_uniforms,true)}else{markUniformsLightsNeedsUpdate(m_uniforms,false)}}if(material instanceof THREE.MeshBasicMaterial||material instanceof THREE.MeshLambertMaterial||material instanceof THREE.MeshPhongMaterial){refreshUniformsCommon(m_uniforms,material)}if(material instanceof THREE.LineBasicMaterial){refreshUniformsLine(m_uniforms,material)}else if(material instanceof THREE.LineDashedMaterial){refreshUniformsLine(m_uniforms,material);refreshUniformsDash(m_uniforms,material)}else if(material instanceof THREE.PointsMaterial){refreshUniformsParticle(m_uniforms,material)}else if(material instanceof THREE.MeshPhongMaterial){refreshUniformsPhong(m_uniforms,material)}else if(material instanceof THREE.MeshDepthMaterial){m_uniforms.mNear.value=camera.near;m_uniforms.mFar.value=camera.far;m_uniforms.opacity.value=material.opacity}else if(material instanceof THREE.MeshNormalMaterial){m_uniforms.opacity.value=material.opacity}if(object.receiveShadow&&!material._shadowPass){refreshUniformsShadow(m_uniforms,lights,camera)}loadUniformsGeneric(materialProperties.uniformsList)}loadUniformsMatrices(p_uniforms,object);if(p_uniforms.modelMatrix!==undefined){_gl.uniformMatrix4fv(p_uniforms.modelMatrix,false,object.matrixWorld.elements)}return program}function refreshUniformsCommon(uniforms,material){uniforms.opacity.value=material.opacity;uniforms.diffuse.value=material.color;if(material.emissive){uniforms.emissive.value=material.emissive}uniforms.map.value=material.map;uniforms.specularMap.value=material.specularMap;uniforms.alphaMap.value=material.alphaMap;if(material.aoMap){uniforms.aoMap.value=material.aoMap;uniforms.aoMapIntensity.value=material.aoMapIntensity}var uvScaleMap;if(material.map){uvScaleMap=material.map}else if(material.specularMap){uvScaleMap=material.specularMap}else if(material.displacementMap){uvScaleMap=material.displacementMap}else if(material.normalMap){uvScaleMap=material.normalMap}else if(material.bumpMap){uvScaleMap=material.bumpMap}else if(material.alphaMap){uvScaleMap=material.alphaMap}else if(material.emissiveMap){uvScaleMap=material.emissiveMap}if(uvScaleMap!==undefined){if(uvScaleMap instanceof THREE.WebGLRenderTarget)uvScaleMap=uvScaleMap.texture;var offset=uvScaleMap.offset;var repeat=uvScaleMap.repeat;uniforms.offsetRepeat.value.set(offset.x,offset.y,repeat.x,repeat.y)}uniforms.envMap.value=material.envMap;uniforms.flipEnvMap.value=material.envMap instanceof THREE.WebGLRenderTargetCube?1:-1;uniforms.reflectivity.value=material.reflectivity;uniforms.refractionRatio.value=material.refractionRatio}function refreshUniformsLine(uniforms,material){uniforms.diffuse.value=material.color;uniforms.opacity.value=material.opacity}function refreshUniformsDash(uniforms,material){uniforms.dashSize.value=material.dashSize;uniforms.totalSize.value=material.dashSize+material.gapSize;uniforms.scale.value=material.scale}function refreshUniformsParticle(uniforms,material){uniforms.psColor.value=material.color;uniforms.opacity.value=material.opacity;uniforms.size.value=material.size;uniforms.scale.value=_canvas.height/2;uniforms.map.value=material.map;if(material.map!==null){var offset=material.map.offset;var repeat=material.map.repeat;uniforms.offsetRepeat.value.set(offset.x,offset.y,repeat.x,repeat.y)}}function refreshUniformsFog(uniforms,fog){uniforms.fogColor.value=fog.color;if(fog instanceof THREE.Fog){uniforms.fogNear.value=fog.near;uniforms.fogFar.value=fog.far}else if(fog instanceof THREE.FogExp2){uniforms.fogDensity.value=fog.density}}function refreshUniformsPhong(uniforms,material){uniforms.specular.value=material.specular;uniforms.shininess.value=Math.max(material.shininess,1e-4);if(material.lightMap){uniforms.lightMap.value=material.lightMap;uniforms.lightMapIntensity.value=material.lightMapIntensity}if(material.emissiveMap){uniforms.emissiveMap.value=material.emissiveMap}if(material.bumpMap){uniforms.bumpMap.value=material.bumpMap;uniforms.bumpScale.value=material.bumpScale}if(material.normalMap){uniforms.normalMap.value=material.normalMap;uniforms.normalScale.value.copy(material.normalScale)}if(material.displacementMap){uniforms.displacementMap.value=material.displacementMap;uniforms.displacementScale.value=material.displacementScale;uniforms.displacementBias.value=material.displacementBias}}function refreshUniformsLights(uniforms,lights){uniforms.ambientLightColor.value=lights.ambient;uniforms.directionalLightColor.value=lights.directional.colors;uniforms.directionalLightDirection.value=lights.directional.positions;uniforms.pointLightColor.value=lights.point.colors;uniforms.pointLightPosition.value=lights.point.positions;uniforms.pointLightDistance.value=lights.point.distances;uniforms.pointLightDecay.value=lights.point.decays;uniforms.spotLightColor.value=lights.spot.colors;uniforms.spotLightPosition.value=lights.spot.positions;uniforms.spotLightDistance.value=lights.spot.distances;uniforms.spotLightDirection.value=lights.spot.directions;uniforms.spotLightAngleCos.value=lights.spot.anglesCos;uniforms.spotLightExponent.value=lights.spot.exponents;uniforms.spotLightDecay.value=lights.spot.decays;uniforms.hemisphereLightSkyColor.value=lights.hemi.skyColors;uniforms.hemisphereLightGroundColor.value=lights.hemi.groundColors;uniforms.hemisphereLightDirection.value=lights.hemi.positions}function markUniformsLightsNeedsUpdate(uniforms,value){uniforms.ambientLightColor.needsUpdate=value;uniforms.directionalLightColor.needsUpdate=value;uniforms.directionalLightDirection.needsUpdate=value;uniforms.pointLightColor.needsUpdate=value;uniforms.pointLightPosition.needsUpdate=value;uniforms.pointLightDistance.needsUpdate=value;uniforms.pointLightDecay.needsUpdate=value;uniforms.spotLightColor.needsUpdate=value;uniforms.spotLightPosition.needsUpdate=value;uniforms.spotLightDistance.needsUpdate=value;uniforms.spotLightDirection.needsUpdate=value;uniforms.spotLightAngleCos.needsUpdate=value;uniforms.spotLightExponent.needsUpdate=value;uniforms.spotLightDecay.needsUpdate=value;uniforms.hemisphereLightSkyColor.needsUpdate=value;uniforms.hemisphereLightGroundColor.needsUpdate=value;uniforms.hemisphereLightDirection.needsUpdate=value}function refreshUniformsShadow(uniforms,lights,camera){if(uniforms.shadowMatrix){var j=0;for(var i=0,il=lights.length;i<il;i++){var light=lights[i];if(light.castShadow===true){if(light instanceof THREE.PointLight||light instanceof THREE.SpotLight||light instanceof THREE.DirectionalLight){var shadow=light.shadow;if(light instanceof THREE.PointLight){_vector3.setFromMatrixPosition(light.matrixWorld).negate();shadow.matrix.identity().setPosition(_vector3);uniforms.shadowDarkness.value[j]=-shadow.darkness}else{uniforms.shadowDarkness.value[j]=shadow.darkness}uniforms.shadowMatrix.value[j]=shadow.matrix;uniforms.shadowMap.value[j]=shadow.map;uniforms.shadowMapSize.value[j]=shadow.mapSize;uniforms.shadowBias.value[j]=shadow.bias;j++}}}}}function loadUniformsMatrices(uniforms,object){_gl.uniformMatrix4fv(uniforms.modelViewMatrix,false,object.modelViewMatrix.elements);if(uniforms.normalMatrix){_gl.uniformMatrix3fv(uniforms.normalMatrix,false,object.normalMatrix.elements)}}function getTextureUnit(){var textureUnit=_usedTextureUnits;if(textureUnit>=capabilities.maxTextures){console.warn("WebGLRenderer: trying to use "+textureUnit+" texture units while this GPU supports only "+capabilities.maxTextures)}_usedTextureUnits+=1;return textureUnit}function loadUniformsGeneric(uniforms){var texture,textureUnit;for(var j=0,jl=uniforms.length;j<jl;j++){var uniform=uniforms[j][0];if(uniform.needsUpdate===false)continue;var type=uniform.type;var value=uniform.value;var location=uniforms[j][1];switch(type){case"1i":_gl.uniform1i(location,value);break;case"1f":_gl.uniform1f(location,value);break;case"2f":_gl.uniform2f(location,value[0],value[1]);break;case"3f":_gl.uniform3f(location,value[0],value[1],value[2]);break;case"4f":_gl.uniform4f(location,value[0],value[1],value[2],value[3]);break;case"1iv":_gl.uniform1iv(location,value);break;case"3iv":_gl.uniform3iv(location,value);break;case"1fv":_gl.uniform1fv(location,value);break;case"2fv":_gl.uniform2fv(location,value);break;case"3fv":_gl.uniform3fv(location,value);break;case"4fv":_gl.uniform4fv(location,value);break;case"Matrix3fv":_gl.uniformMatrix3fv(location,false,value);break;case"Matrix4fv":_gl.uniformMatrix4fv(location,false,value);break;case"i":_gl.uniform1i(location,value);break;case"f":_gl.uniform1f(location,value);break;case"v2":_gl.uniform2f(location,value.x,value.y);break;case"v3":_gl.uniform3f(location,value.x,value.y,value.z);break;case"v4":_gl.uniform4f(location,value.x,value.y,value.z,value.w);break;case"c":_gl.uniform3f(location,value.r,value.g,value.b);break;case"iv1":_gl.uniform1iv(location,value);break;case"iv":_gl.uniform3iv(location,value);break;case"fv1":_gl.uniform1fv(location,value);break;case"fv":_gl.uniform3fv(location,value);break;case"v2v":if(uniform._array===undefined){uniform._array=new Float32Array(2*value.length)}for(var i=0,i2=0,il=value.length;i<il;i++,i2+=2){uniform._array[i2+0]=value[i].x;uniform._array[i2+1]=value[i].y}_gl.uniform2fv(location,uniform._array);break;case"v3v":if(uniform._array===undefined){uniform._array=new Float32Array(3*value.length)}for(var i=0,i3=0,il=value.length;i<il;i++,i3+=3){uniform._array[i3+0]=value[i].x;uniform._array[i3+1]=value[i].y;uniform._array[i3+2]=value[i].z}_gl.uniform3fv(location,uniform._array);break;case"v4v":if(uniform._array===undefined){uniform._array=new Float32Array(4*value.length)}for(var i=0,i4=0,il=value.length;i<il;i++,i4+=4){uniform._array[i4+0]=value[i].x;uniform._array[i4+1]=value[i].y;uniform._array[i4+2]=value[i].z;uniform._array[i4+3]=value[i].w}_gl.uniform4fv(location,uniform._array);break;case"m3":_gl.uniformMatrix3fv(location,false,value.elements);break;case"m3v":if(uniform._array===undefined){uniform._array=new Float32Array(9*value.length)}for(var i=0,il=value.length;i<il;i++){value[i].flattenToArrayOffset(uniform._array,i*9)}_gl.uniformMatrix3fv(location,false,uniform._array);break;case"m4":_gl.uniformMatrix4fv(location,false,value.elements);break;case"m4v":if(uniform._array===undefined){uniform._array=new Float32Array(16*value.length)}for(var i=0,il=value.length;i<il;i++){value[i].flattenToArrayOffset(uniform._array,i*16)}_gl.uniformMatrix4fv(location,false,uniform._array);break;case"t":texture=value;textureUnit=getTextureUnit();_gl.uniform1i(location,textureUnit);if(!texture)continue;if(texture instanceof THREE.CubeTexture||Array.isArray(texture.image)&&texture.image.length===6){setCubeTexture(texture,textureUnit)}else if(texture instanceof THREE.WebGLRenderTargetCube){setCubeTextureDynamic(texture.texture,textureUnit)}else if(texture instanceof THREE.WebGLRenderTarget){_this.setTexture(texture.texture,textureUnit)}else{_this.setTexture(texture,textureUnit)}break;case"tv":if(uniform._array===undefined){uniform._array=[]}for(var i=0,il=uniform.value.length;i<il;i++){uniform._array[i]=getTextureUnit()}_gl.uniform1iv(location,uniform._array);for(var i=0,il=uniform.value.length;i<il;i++){texture=uniform.value[i];textureUnit=uniform._array[i];if(!texture)continue;if(texture instanceof THREE.CubeTexture||texture.image instanceof Array&&texture.image.length===6){setCubeTexture(texture,textureUnit)}else if(texture instanceof THREE.WebGLRenderTarget){_this.setTexture(texture.texture,textureUnit)}else if(texture instanceof THREE.WebGLRenderTargetCube){setCubeTextureDynamic(texture.texture,textureUnit)}else{_this.setTexture(texture,textureUnit)}}break;default:console.warn("THREE.WebGLRenderer: Unknown uniform type: "+type)}}}function setColorLinear(array,offset,color,intensity){array[offset+0]=color.r*intensity;array[offset+1]=color.g*intensity;array[offset+2]=color.b*intensity}function setupLights(lights,camera){var l,ll,light,r=0,g=0,b=0,color,skyColor,groundColor,intensity,distance,zlights=_lights,viewMatrix=camera.matrixWorldInverse,dirColors=zlights.directional.colors,dirPositions=zlights.directional.positions,pointColors=zlights.point.colors,pointPositions=zlights.point.positions,pointDistances=zlights.point.distances,pointDecays=zlights.point.decays,spotColors=zlights.spot.colors,spotPositions=zlights.spot.positions,spotDistances=zlights.spot.distances,spotDirections=zlights.spot.directions,spotAnglesCos=zlights.spot.anglesCos,spotExponents=zlights.spot.exponents,spotDecays=zlights.spot.decays,hemiSkyColors=zlights.hemi.skyColors,hemiGroundColors=zlights.hemi.groundColors,hemiPositions=zlights.hemi.positions,dirLength=0,pointLength=0,spotLength=0,hemiLength=0,dirCount=0,pointCount=0,spotCount=0,hemiCount=0,dirOffset=0,pointOffset=0,spotOffset=0,hemiOffset=0;for(l=0,ll=lights.length;l<ll;l++){light=lights[l];color=light.color;intensity=light.intensity;distance=light.distance;if(light instanceof THREE.AmbientLight){if(!light.visible)continue;r+=color.r;g+=color.g;b+=color.b}else if(light instanceof THREE.DirectionalLight){dirCount+=1;if(!light.visible)continue;_direction.setFromMatrixPosition(light.matrixWorld);_vector3.setFromMatrixPosition(light.target.matrixWorld);_direction.sub(_vector3);_direction.transformDirection(viewMatrix);dirOffset=dirLength*3;dirPositions[dirOffset+0]=_direction.x;dirPositions[dirOffset+1]=_direction.y;dirPositions[dirOffset+2]=_direction.z;setColorLinear(dirColors,dirOffset,color,intensity);dirLength+=1}else if(light instanceof THREE.PointLight){pointCount+=1;if(!light.visible)continue;pointOffset=pointLength*3;setColorLinear(pointColors,pointOffset,color,intensity);_vector3.setFromMatrixPosition(light.matrixWorld);_vector3.applyMatrix4(viewMatrix);pointPositions[pointOffset+0]=_vector3.x;pointPositions[pointOffset+1]=_vector3.y;pointPositions[pointOffset+2]=_vector3.z;pointDistances[pointLength]=distance;pointDecays[pointLength]=light.distance===0?0:light.decay;pointLength+=1}else if(light instanceof THREE.SpotLight){spotCount+=1;if(!light.visible)continue;spotOffset=spotLength*3;setColorLinear(spotColors,spotOffset,color,intensity);_direction.setFromMatrixPosition(light.matrixWorld);_vector3.copy(_direction).applyMatrix4(viewMatrix);spotPositions[spotOffset+0]=_vector3.x;spotPositions[spotOffset+1]=_vector3.y;spotPositions[spotOffset+2]=_vector3.z;spotDistances[spotLength]=distance;_vector3.setFromMatrixPosition(light.target.matrixWorld);_direction.sub(_vector3);_direction.transformDirection(viewMatrix);spotDirections[spotOffset+0]=_direction.x;spotDirections[spotOffset+1]=_direction.y;spotDirections[spotOffset+2]=_direction.z;spotAnglesCos[spotLength]=Math.cos(light.angle);spotExponents[spotLength]=light.exponent;spotDecays[spotLength]=light.distance===0?0:light.decay;spotLength+=1}else if(light instanceof THREE.HemisphereLight){hemiCount+=1;if(!light.visible)continue;_direction.setFromMatrixPosition(light.matrixWorld);_direction.transformDirection(viewMatrix);hemiOffset=hemiLength*3;hemiPositions[hemiOffset+0]=_direction.x;hemiPositions[hemiOffset+1]=_direction.y;hemiPositions[hemiOffset+2]=_direction.z;skyColor=light.color;groundColor=light.groundColor;setColorLinear(hemiSkyColors,hemiOffset,skyColor,intensity);setColorLinear(hemiGroundColors,hemiOffset,groundColor,intensity);hemiLength+=1}}for(l=dirLength*3,ll=Math.max(dirColors.length,dirCount*3);l<ll;l++)dirColors[l]=0;for(l=pointLength*3,ll=Math.max(pointColors.length,pointCount*3);l<ll;l++)pointColors[l]=0;for(l=spotLength*3,ll=Math.max(spotColors.length,spotCount*3);l<ll;l++)spotColors[l]=0;for(l=hemiLength*3,ll=Math.max(hemiSkyColors.length,hemiCount*3);l<ll;l++)hemiSkyColors[l]=0;for(l=hemiLength*3,ll=Math.max(hemiGroundColors.length,hemiCount*3);l<ll;l++)hemiGroundColors[l]=0;zlights.directional.length=dirLength;zlights.point.length=pointLength;zlights.spot.length=spotLength;zlights.hemi.length=hemiLength;zlights.ambient[0]=r;zlights.ambient[1]=g;zlights.ambient[2]=b}this.setFaceCulling=function(cullFace,frontFaceDirection){if(cullFace===THREE.CullFaceNone){state.disable(_gl.CULL_FACE)}else{if(frontFaceDirection===THREE.FrontFaceDirectionCW){_gl.frontFace(_gl.CW)}else{_gl.frontFace(_gl.CCW)}if(cullFace===THREE.CullFaceBack){_gl.cullFace(_gl.BACK)}else if(cullFace===THREE.CullFaceFront){_gl.cullFace(_gl.FRONT)}else{_gl.cullFace(_gl.FRONT_AND_BACK)}state.enable(_gl.CULL_FACE)}};function setTextureParameters(textureType,texture,isImagePowerOfTwo){var extension;if(isImagePowerOfTwo){_gl.texParameteri(textureType,_gl.TEXTURE_WRAP_S,paramThreeToGL(texture.wrapS));_gl.texParameteri(textureType,_gl.TEXTURE_WRAP_T,paramThreeToGL(texture.wrapT));_gl.texParameteri(textureType,_gl.TEXTURE_MAG_FILTER,paramThreeToGL(texture.magFilter));_gl.texParameteri(textureType,_gl.TEXTURE_MIN_FILTER,paramThreeToGL(texture.minFilter))}else{_gl.texParameteri(textureType,_gl.TEXTURE_WRAP_S,_gl.CLAMP_TO_EDGE);_gl.texParameteri(textureType,_gl.TEXTURE_WRAP_T,_gl.CLAMP_TO_EDGE);if(texture.wrapS!==THREE.ClampToEdgeWrapping||texture.wrapT!==THREE.ClampToEdgeWrapping){console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.",texture)}_gl.texParameteri(textureType,_gl.TEXTURE_MAG_FILTER,filterFallback(texture.magFilter));_gl.texParameteri(textureType,_gl.TEXTURE_MIN_FILTER,filterFallback(texture.minFilter));if(texture.minFilter!==THREE.NearestFilter&&texture.minFilter!==THREE.LinearFilter){console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.",texture)}}extension=extensions.get("EXT_texture_filter_anisotropic");if(extension){if(texture.type===THREE.FloatType&&extensions.get("OES_texture_float_linear")===null)return;if(texture.type===THREE.HalfFloatType&&extensions.get("OES_texture_half_float_linear")===null)return;if(texture.anisotropy>1||properties.get(texture).__currentAnisotropy){_gl.texParameterf(textureType,extension.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(texture.anisotropy,_this.getMaxAnisotropy()));properties.get(texture).__currentAnisotropy=texture.anisotropy}}}function uploadTexture(textureProperties,texture,slot){if(textureProperties.__webglInit===undefined){textureProperties.__webglInit=true;texture.addEventListener("dispose",onTextureDispose);textureProperties.__webglTexture=_gl.createTexture();_infoMemory.textures++}state.activeTexture(_gl.TEXTURE0+slot);state.bindTexture(_gl.TEXTURE_2D,textureProperties.__webglTexture);_gl.pixelStorei(_gl.UNPACK_FLIP_Y_WEBGL,texture.flipY);_gl.pixelStorei(_gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,texture.premultiplyAlpha);_gl.pixelStorei(_gl.UNPACK_ALIGNMENT,texture.unpackAlignment);texture.image=clampToMaxSize(texture.image,capabilities.maxTextureSize);if(textureNeedsPowerOfTwo(texture)&&isPowerOfTwo(texture.image)===false){texture.image=makePowerOfTwo(texture.image)}var image=texture.image,isImagePowerOfTwo=isPowerOfTwo(image),glFormat=paramThreeToGL(texture.format),glType=paramThreeToGL(texture.type);setTextureParameters(_gl.TEXTURE_2D,texture,isImagePowerOfTwo);var mipmap,mipmaps=texture.mipmaps;if(texture instanceof THREE.DataTexture){if(mipmaps.length>0&&isImagePowerOfTwo){for(var i=0,il=mipmaps.length;i<il;i++){mipmap=mipmaps[i];state.texImage2D(_gl.TEXTURE_2D,i,glFormat,mipmap.width,mipmap.height,0,glFormat,glType,mipmap.data)}texture.generateMipmaps=false}else{state.texImage2D(_gl.TEXTURE_2D,0,glFormat,image.width,image.height,0,glFormat,glType,image.data)}}else if(texture instanceof THREE.CompressedTexture){for(var i=0,il=mipmaps.length;i<il;i++){mipmap=mipmaps[i];if(texture.format!==THREE.RGBAFormat&&texture.format!==THREE.RGBFormat){if(state.getCompressedTextureFormats().indexOf(glFormat)>-1){state.compressedTexImage2D(_gl.TEXTURE_2D,i,glFormat,mipmap.width,mipmap.height,0,mipmap.data)}else{console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()")}}else{state.texImage2D(_gl.TEXTURE_2D,i,glFormat,mipmap.width,mipmap.height,0,glFormat,glType,mipmap.data)}}}else{if(mipmaps.length>0&&isImagePowerOfTwo){for(var i=0,il=mipmaps.length;i<il;i++){mipmap=mipmaps[i];state.texImage2D(_gl.TEXTURE_2D,i,glFormat,glFormat,glType,mipmap)}texture.generateMipmaps=false}else{state.texImage2D(_gl.TEXTURE_2D,0,glFormat,glFormat,glType,texture.image)}}if(texture.generateMipmaps&&isImagePowerOfTwo)_gl.generateMipmap(_gl.TEXTURE_2D);textureProperties.__version=texture.version;if(texture.onUpdate)texture.onUpdate(texture)}this.setTexture=function(texture,slot){var textureProperties=properties.get(texture);if(texture.version>0&&textureProperties.__version!==texture.version){var image=texture.image;if(image===undefined){console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined",texture);return}if(image.complete===false){console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete",texture);return}uploadTexture(textureProperties,texture,slot);return}state.activeTexture(_gl.TEXTURE0+slot);state.bindTexture(_gl.TEXTURE_2D,textureProperties.__webglTexture)};function clampToMaxSize(image,maxSize){if(image.width>maxSize||image.height>maxSize){var scale=maxSize/Math.max(image.width,image.height);var canvas=document.createElement("canvas");canvas.width=Math.floor(image.width*scale);canvas.height=Math.floor(image.height*scale);var context=canvas.getContext("2d");context.drawImage(image,0,0,image.width,image.height,0,0,canvas.width,canvas.height);console.warn("THREE.WebGLRenderer: image is too big ("+image.width+"x"+image.height+"). Resized to "+canvas.width+"x"+canvas.height,image);return canvas}return image}function isPowerOfTwo(image){return THREE.Math.isPowerOfTwo(image.width)&&THREE.Math.isPowerOfTwo(image.height)}function textureNeedsPowerOfTwo(texture){if(texture.wrapS!==THREE.ClampToEdgeWrapping||texture.wrapT!==THREE.ClampToEdgeWrapping)return true;if(texture.minFilter!==THREE.NearestFilter&&texture.minFilter!==THREE.LinearFilter)return true;return false}function makePowerOfTwo(image){if(image instanceof HTMLImageElement||image instanceof HTMLCanvasElement){var canvas=document.createElement("canvas");canvas.width=THREE.Math.nearestPowerOfTwo(image.width);canvas.height=THREE.Math.nearestPowerOfTwo(image.height);var context=canvas.getContext("2d");context.drawImage(image,0,0,canvas.width,canvas.height);console.warn("THREE.WebGLRenderer: image is not power of two ("+image.width+"x"+image.height+"). Resized to "+canvas.width+"x"+canvas.height,image);return canvas}return image}function setCubeTexture(texture,slot){var textureProperties=properties.get(texture);if(texture.image.length===6){if(texture.version>0&&textureProperties.__version!==texture.version){if(!textureProperties.__image__webglTextureCube){texture.addEventListener("dispose",onTextureDispose);textureProperties.__image__webglTextureCube=_gl.createTexture();_infoMemory.textures++}state.activeTexture(_gl.TEXTURE0+slot);state.bindTexture(_gl.TEXTURE_CUBE_MAP,textureProperties.__image__webglTextureCube);_gl.pixelStorei(_gl.UNPACK_FLIP_Y_WEBGL,texture.flipY);var isCompressed=texture instanceof THREE.CompressedTexture;var isDataTexture=texture.image[0]instanceof THREE.DataTexture;var cubeImage=[];for(var i=0;i<6;i++){if(_this.autoScaleCubemaps&&!isCompressed&&!isDataTexture){cubeImage[i]=clampToMaxSize(texture.image[i],capabilities.maxCubemapSize)}else{cubeImage[i]=isDataTexture?texture.image[i].image:texture.image[i]}}var image=cubeImage[0],isImagePowerOfTwo=isPowerOfTwo(image),glFormat=paramThreeToGL(texture.format),glType=paramThreeToGL(texture.type);setTextureParameters(_gl.TEXTURE_CUBE_MAP,texture,isImagePowerOfTwo);for(var i=0;i<6;i++){if(!isCompressed){if(isDataTexture){state.texImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X+i,0,glFormat,cubeImage[i].width,cubeImage[i].height,0,glFormat,glType,cubeImage[i].data)}else{state.texImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X+i,0,glFormat,glFormat,glType,cubeImage[i])}}else{var mipmap,mipmaps=cubeImage[i].mipmaps;for(var j=0,jl=mipmaps.length;j<jl;j++){mipmap=mipmaps[j];if(texture.format!==THREE.RGBAFormat&&texture.format!==THREE.RGBFormat){if(state.getCompressedTextureFormats().indexOf(glFormat)>-1){state.compressedTexImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X+i,j,glFormat,mipmap.width,mipmap.height,0,mipmap.data);

        }else{console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setCubeTexture()")}}else{state.texImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X+i,j,glFormat,mipmap.width,mipmap.height,0,glFormat,glType,mipmap.data)}}}}if(texture.generateMipmaps&&isImagePowerOfTwo){_gl.generateMipmap(_gl.TEXTURE_CUBE_MAP)}textureProperties.__version=texture.version;if(texture.onUpdate)texture.onUpdate(texture)}else{state.activeTexture(_gl.TEXTURE0+slot);state.bindTexture(_gl.TEXTURE_CUBE_MAP,textureProperties.__image__webglTextureCube)}}}function setCubeTextureDynamic(texture,slot){state.activeTexture(_gl.TEXTURE0+slot);state.bindTexture(_gl.TEXTURE_CUBE_MAP,properties.get(texture).__webglTexture)}function setupFrameBuffer(framebuffer,renderTarget,textureTarget){_gl.bindFramebuffer(_gl.FRAMEBUFFER,framebuffer);_gl.framebufferTexture2D(_gl.FRAMEBUFFER,_gl.COLOR_ATTACHMENT0,textureTarget,properties.get(renderTarget.texture).__webglTexture,0)}function setupRenderBuffer(renderbuffer,renderTarget){_gl.bindRenderbuffer(_gl.RENDERBUFFER,renderbuffer);if(renderTarget.depthBuffer&&!renderTarget.stencilBuffer){_gl.renderbufferStorage(_gl.RENDERBUFFER,_gl.DEPTH_COMPONENT16,renderTarget.width,renderTarget.height);_gl.framebufferRenderbuffer(_gl.FRAMEBUFFER,_gl.DEPTH_ATTACHMENT,_gl.RENDERBUFFER,renderbuffer)}else if(renderTarget.depthBuffer&&renderTarget.stencilBuffer){_gl.renderbufferStorage(_gl.RENDERBUFFER,_gl.DEPTH_STENCIL,renderTarget.width,renderTarget.height);_gl.framebufferRenderbuffer(_gl.FRAMEBUFFER,_gl.DEPTH_STENCIL_ATTACHMENT,_gl.RENDERBUFFER,renderbuffer)}else{_gl.renderbufferStorage(_gl.RENDERBUFFER,_gl.RGBA4,renderTarget.width,renderTarget.height)}}this.setRenderTarget=function(renderTarget){var isCube=renderTarget instanceof THREE.WebGLRenderTargetCube;if(renderTarget&&properties.get(renderTarget).__webglFramebuffer===undefined){var renderTargetProperties=properties.get(renderTarget);var textureProperties=properties.get(renderTarget.texture);if(renderTarget.depthBuffer===undefined)renderTarget.depthBuffer=true;if(renderTarget.stencilBuffer===undefined)renderTarget.stencilBuffer=true;renderTarget.addEventListener("dispose",onRenderTargetDispose);textureProperties.__webglTexture=_gl.createTexture();_infoMemory.textures++;var isTargetPowerOfTwo=isPowerOfTwo(renderTarget),glFormat=paramThreeToGL(renderTarget.texture.format),glType=paramThreeToGL(renderTarget.texture.type);if(isCube){renderTargetProperties.__webglFramebuffer=[];renderTargetProperties.__webglRenderbuffer=[];state.bindTexture(_gl.TEXTURE_CUBE_MAP,textureProperties.__webglTexture);setTextureParameters(_gl.TEXTURE_CUBE_MAP,renderTarget.texture,isTargetPowerOfTwo);for(var i=0;i<6;i++){renderTargetProperties.__webglFramebuffer[i]=_gl.createFramebuffer();renderTargetProperties.__webglRenderbuffer[i]=_gl.createRenderbuffer();state.texImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X+i,0,glFormat,renderTarget.width,renderTarget.height,0,glFormat,glType,null);setupFrameBuffer(renderTargetProperties.__webglFramebuffer[i],renderTarget,_gl.TEXTURE_CUBE_MAP_POSITIVE_X+i);setupRenderBuffer(renderTargetProperties.__webglRenderbuffer[i],renderTarget)}if(renderTarget.texture.generateMipmaps&&isTargetPowerOfTwo)_gl.generateMipmap(_gl.TEXTURE_CUBE_MAP)}else{renderTargetProperties.__webglFramebuffer=_gl.createFramebuffer();if(renderTarget.shareDepthFrom){renderTargetProperties.__webglRenderbuffer=renderTarget.shareDepthFrom.__webglRenderbuffer}else{renderTargetProperties.__webglRenderbuffer=_gl.createRenderbuffer()}state.bindTexture(_gl.TEXTURE_2D,textureProperties.__webglTexture);setTextureParameters(_gl.TEXTURE_2D,renderTarget.texture,isTargetPowerOfTwo);state.texImage2D(_gl.TEXTURE_2D,0,glFormat,renderTarget.width,renderTarget.height,0,glFormat,glType,null);setupFrameBuffer(renderTargetProperties.__webglFramebuffer,renderTarget,_gl.TEXTURE_2D);if(renderTarget.shareDepthFrom){if(renderTarget.depthBuffer&&!renderTarget.stencilBuffer){_gl.framebufferRenderbuffer(_gl.FRAMEBUFFER,_gl.DEPTH_ATTACHMENT,_gl.RENDERBUFFER,renderTargetProperties.__webglRenderbuffer)}else if(renderTarget.depthBuffer&&renderTarget.stencilBuffer){_gl.framebufferRenderbuffer(_gl.FRAMEBUFFER,_gl.DEPTH_STENCIL_ATTACHMENT,_gl.RENDERBUFFER,renderTargetProperties.__webglRenderbuffer)}}else{setupRenderBuffer(renderTargetProperties.__webglRenderbuffer,renderTarget)}if(renderTarget.texture.generateMipmaps&&isTargetPowerOfTwo)_gl.generateMipmap(_gl.TEXTURE_2D)}if(isCube){state.bindTexture(_gl.TEXTURE_CUBE_MAP,null)}else{state.bindTexture(_gl.TEXTURE_2D,null)}_gl.bindRenderbuffer(_gl.RENDERBUFFER,null);_gl.bindFramebuffer(_gl.FRAMEBUFFER,null)}var framebuffer,width,height,vx,vy;if(renderTarget){var renderTargetProperties=properties.get(renderTarget);if(isCube){framebuffer=renderTargetProperties.__webglFramebuffer[renderTarget.activeCubeFace]}else{framebuffer=renderTargetProperties.__webglFramebuffer}width=renderTarget.width;height=renderTarget.height;vx=0;vy=0}else{framebuffer=null;width=_viewportWidth;height=_viewportHeight;vx=_viewportX;vy=_viewportY}if(framebuffer!==_currentFramebuffer){_gl.bindFramebuffer(_gl.FRAMEBUFFER,framebuffer);_gl.viewport(vx,vy,width,height);_currentFramebuffer=framebuffer}if(isCube){var textureProperties=properties.get(renderTarget.texture);_gl.framebufferTexture2D(_gl.FRAMEBUFFER,_gl.COLOR_ATTACHMENT0,_gl.TEXTURE_CUBE_MAP_POSITIVE_X+renderTarget.activeCubeFace,textureProperties.__webglTexture,0)}_currentWidth=width;_currentHeight=height};this.readRenderTargetPixels=function(renderTarget,x,y,width,height,buffer){if(renderTarget instanceof THREE.WebGLRenderTarget===false){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");return}var framebuffer=properties.get(renderTarget).__webglFramebuffer;if(framebuffer){var restore=false;if(framebuffer!==_currentFramebuffer){_gl.bindFramebuffer(_gl.FRAMEBUFFER,framebuffer);restore=true}try{var texture=renderTarget.texture;if(texture.format!==THREE.RGBAFormat&&paramThreeToGL(texture.format)!==_gl.getParameter(_gl.IMPLEMENTATION_COLOR_READ_FORMAT)){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");return}if(texture.type!==THREE.UnsignedByteType&&paramThreeToGL(texture.type)!==_gl.getParameter(_gl.IMPLEMENTATION_COLOR_READ_TYPE)&&!(texture.type===THREE.FloatType&&extensions.get("WEBGL_color_buffer_float"))&&!(texture.type===THREE.HalfFloatType&&extensions.get("EXT_color_buffer_half_float"))){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");return}if(_gl.checkFramebufferStatus(_gl.FRAMEBUFFER)===_gl.FRAMEBUFFER_COMPLETE){_gl.readPixels(x,y,width,height,paramThreeToGL(texture.format),paramThreeToGL(texture.type),buffer)}else{console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.")}}finally{if(restore){_gl.bindFramebuffer(_gl.FRAMEBUFFER,_currentFramebuffer)}}}};function updateRenderTargetMipmap(renderTarget){var target=renderTarget instanceof THREE.WebGLRenderTargetCube?_gl.TEXTURE_CUBE_MAP:_gl.TEXTURE_2D;var texture=properties.get(renderTarget.texture).__webglTexture;state.bindTexture(target,texture);_gl.generateMipmap(target);state.bindTexture(target,null)}function filterFallback(f){if(f===THREE.NearestFilter||f===THREE.NearestMipMapNearestFilter||f===THREE.NearestMipMapLinearFilter){return _gl.NEAREST}return _gl.LINEAR}function paramThreeToGL(p){var extension;if(p===THREE.RepeatWrapping)return _gl.REPEAT;if(p===THREE.ClampToEdgeWrapping)return _gl.CLAMP_TO_EDGE;if(p===THREE.MirroredRepeatWrapping)return _gl.MIRRORED_REPEAT;if(p===THREE.NearestFilter)return _gl.NEAREST;if(p===THREE.NearestMipMapNearestFilter)return _gl.NEAREST_MIPMAP_NEAREST;if(p===THREE.NearestMipMapLinearFilter)return _gl.NEAREST_MIPMAP_LINEAR;if(p===THREE.LinearFilter)return _gl.LINEAR;if(p===THREE.LinearMipMapNearestFilter)return _gl.LINEAR_MIPMAP_NEAREST;if(p===THREE.LinearMipMapLinearFilter)return _gl.LINEAR_MIPMAP_LINEAR;if(p===THREE.UnsignedByteType)return _gl.UNSIGNED_BYTE;if(p===THREE.UnsignedShort4444Type)return _gl.UNSIGNED_SHORT_4_4_4_4;if(p===THREE.UnsignedShort5551Type)return _gl.UNSIGNED_SHORT_5_5_5_1;if(p===THREE.UnsignedShort565Type)return _gl.UNSIGNED_SHORT_5_6_5;if(p===THREE.ByteType)return _gl.BYTE;if(p===THREE.ShortType)return _gl.SHORT;if(p===THREE.UnsignedShortType)return _gl.UNSIGNED_SHORT;if(p===THREE.IntType)return _gl.INT;if(p===THREE.UnsignedIntType)return _gl.UNSIGNED_INT;if(p===THREE.FloatType)return _gl.FLOAT;extension=extensions.get("OES_texture_half_float");if(extension!==null){if(p===THREE.HalfFloatType)return extension.HALF_FLOAT_OES}if(p===THREE.AlphaFormat)return _gl.ALPHA;if(p===THREE.RGBFormat)return _gl.RGB;if(p===THREE.RGBAFormat)return _gl.RGBA;if(p===THREE.LuminanceFormat)return _gl.LUMINANCE;if(p===THREE.LuminanceAlphaFormat)return _gl.LUMINANCE_ALPHA;if(p===THREE.AddEquation)return _gl.FUNC_ADD;if(p===THREE.SubtractEquation)return _gl.FUNC_SUBTRACT;if(p===THREE.ReverseSubtractEquation)return _gl.FUNC_REVERSE_SUBTRACT;if(p===THREE.ZeroFactor)return _gl.ZERO;if(p===THREE.OneFactor)return _gl.ONE;if(p===THREE.SrcColorFactor)return _gl.SRC_COLOR;if(p===THREE.OneMinusSrcColorFactor)return _gl.ONE_MINUS_SRC_COLOR;if(p===THREE.SrcAlphaFactor)return _gl.SRC_ALPHA;if(p===THREE.OneMinusSrcAlphaFactor)return _gl.ONE_MINUS_SRC_ALPHA;if(p===THREE.DstAlphaFactor)return _gl.DST_ALPHA;if(p===THREE.OneMinusDstAlphaFactor)return _gl.ONE_MINUS_DST_ALPHA;if(p===THREE.DstColorFactor)return _gl.DST_COLOR;if(p===THREE.OneMinusDstColorFactor)return _gl.ONE_MINUS_DST_COLOR;if(p===THREE.SrcAlphaSaturateFactor)return _gl.SRC_ALPHA_SATURATE;extension=extensions.get("WEBGL_compressed_texture_s3tc");if(extension!==null){if(p===THREE.RGB_S3TC_DXT1_Format)return extension.COMPRESSED_RGB_S3TC_DXT1_EXT;if(p===THREE.RGBA_S3TC_DXT1_Format)return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(p===THREE.RGBA_S3TC_DXT3_Format)return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(p===THREE.RGBA_S3TC_DXT5_Format)return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT}extension=extensions.get("WEBGL_compressed_texture_pvrtc");if(extension!==null){if(p===THREE.RGB_PVRTC_4BPPV1_Format)return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(p===THREE.RGB_PVRTC_2BPPV1_Format)return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(p===THREE.RGBA_PVRTC_4BPPV1_Format)return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(p===THREE.RGBA_PVRTC_2BPPV1_Format)return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}extension=extensions.get("EXT_blend_minmax");if(extension!==null){if(p===THREE.MinEquation)return extension.MIN_EXT;if(p===THREE.MaxEquation)return extension.MAX_EXT}return 0}this.supportsFloatTextures=function(){console.warn("THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' ).");return extensions.get("OES_texture_float")};this.supportsHalfFloatTextures=function(){console.warn("THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( 'OES_texture_half_float' ).");return extensions.get("OES_texture_half_float")};this.supportsStandardDerivatives=function(){console.warn("THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( 'OES_standard_derivatives' ).");return extensions.get("OES_standard_derivatives")};this.supportsCompressedTextureS3TC=function(){console.warn("THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( 'WEBGL_compressed_texture_s3tc' ).");return extensions.get("WEBGL_compressed_texture_s3tc")};this.supportsCompressedTexturePVRTC=function(){console.warn("THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( 'WEBGL_compressed_texture_pvrtc' ).");return extensions.get("WEBGL_compressed_texture_pvrtc")};this.supportsBlendMinMax=function(){console.warn("THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( 'EXT_blend_minmax' ).");return extensions.get("EXT_blend_minmax")};this.supportsVertexTextures=function(){return capabilities.vertexTextures};this.supportsInstancedArrays=function(){console.warn("THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( 'ANGLE_instanced_arrays' ).");return extensions.get("ANGLE_instanced_arrays")};this.initMaterial=function(){console.warn("THREE.WebGLRenderer: .initMaterial() has been removed.")};this.addPrePlugin=function(){console.warn("THREE.WebGLRenderer: .addPrePlugin() has been removed.")};this.addPostPlugin=function(){console.warn("THREE.WebGLRenderer: .addPostPlugin() has been removed.")};this.updateShadowMap=function(){console.warn("THREE.WebGLRenderer: .updateShadowMap() has been removed.")};Object.defineProperties(this,{shadowMapEnabled:{get:function(){return shadowMap.enabled},set:function(value){console.warn("THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.");shadowMap.enabled=value}},shadowMapType:{get:function(){return shadowMap.type},set:function(value){console.warn("THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type.");shadowMap.type=value}},shadowMapCullFace:{get:function(){return shadowMap.cullFace},set:function(value){console.warn("THREE.WebGLRenderer: .shadowMapCullFace is now .shadowMap.cullFace.");shadowMap.cullFace=value}},shadowMapDebug:{get:function(){return shadowMap.debug},set:function(value){console.warn("THREE.WebGLRenderer: .shadowMapDebug is now .shadowMap.debug.");shadowMap.debug=value}}})};THREE.WebGLRenderTarget=function(width,height,options){this.uuid=THREE.Math.generateUUID();this.width=width;this.height=height;options=options||{};if(options.minFilter===undefined)options.minFilter=THREE.LinearFilter;this.texture=new THREE.Texture(undefined,undefined,options.wrapS,options.wrapT,options.magFilter,options.minFilter,options.format,options.type,options.anisotropy);this.depthBuffer=options.depthBuffer!==undefined?options.depthBuffer:true;this.stencilBuffer=options.stencilBuffer!==undefined?options.stencilBuffer:true;this.shareDepthFrom=options.shareDepthFrom!==undefined?options.shareDepthFrom:null};THREE.WebGLRenderTarget.prototype={constructor:THREE.WebGLRenderTarget,get wrapS(){console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.");return this.texture.wrapS},set wrapS(value){console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.");this.texture.wrapS=value},get wrapT(){console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.");return this.texture.wrapT},set wrapT(value){console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.");this.texture.wrapT=value},get magFilter(){console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.");return this.texture.magFilter},set magFilter(value){console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.");this.texture.magFilter=value},get minFilter(){console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.");return this.texture.minFilter},set minFilter(value){console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.");this.texture.minFilter=value},get anisotropy(){console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.");return this.texture.anisotropy},set anisotropy(value){console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.");this.texture.anisotropy=value},get offset(){console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset.");return this.texture.offset},set offset(value){console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset.");this.texture.offset=value},get repeat(){console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat.");return this.texture.repeat},set repeat(value){console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat.");this.texture.repeat=value},get format(){console.warn("THREE.WebGLRenderTarget: .format is now .texture.format.");return this.texture.format},set format(value){console.warn("THREE.WebGLRenderTarget: .format is now .texture.format.");this.texture.format=value},get type(){console.warn("THREE.WebGLRenderTarget: .type is now .texture.type.");return this.texture.type},set type(value){console.warn("THREE.WebGLRenderTarget: .type is now .texture.type.");this.texture.type=value},get generateMipmaps(){console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.");return this.texture.generateMipmaps},set generateMipmaps(value){console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.");this.texture.generateMipmaps=value},setSize:function(width,height){if(this.width!==width||this.height!==height){this.width=width;this.height=height;this.dispose()}},clone:function(){return(new this.constructor).copy(this)},copy:function(source){this.width=source.width;this.height=source.height;this.texture=source.texture.clone();this.depthBuffer=source.depthBuffer;this.stencilBuffer=source.stencilBuffer;this.shareDepthFrom=source.shareDepthFrom;return this},dispose:function(){this.dispatchEvent({type:"dispose"})}};THREE.EventDispatcher.prototype.apply(THREE.WebGLRenderTarget.prototype);THREE.WebGLRenderTargetCube=function(width,height,options){THREE.WebGLRenderTarget.call(this,width,height,options);this.activeCubeFace=0};THREE.WebGLRenderTargetCube.prototype=Object.create(THREE.WebGLRenderTarget.prototype);THREE.WebGLRenderTargetCube.prototype.constructor=THREE.WebGLRenderTargetCube;THREE.WebGLBufferRenderer=function(_gl,extensions,_infoRender){var mode;function setMode(value){mode=value}function render(start,count){_gl.drawArrays(mode,start,count);_infoRender.calls++;_infoRender.vertices+=count;if(mode===_gl.TRIANGLES)_infoRender.faces+=count/3}function renderInstances(geometry){var extension=extensions.get("ANGLE_instanced_arrays");if(extension===null){console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");return}var position=geometry.attributes.position;if(position instanceof THREE.InterleavedBufferAttribute){extension.drawArraysInstancedANGLE(mode,0,position.data.count,geometry.maxInstancedCount)}else{extension.drawArraysInstancedANGLE(mode,0,position.count,geometry.maxInstancedCount)}}this.setMode=setMode;this.render=render;this.renderInstances=renderInstances};THREE.WebGLIndexedBufferRenderer=function(_gl,extensions,_infoRender){var mode;function setMode(value){mode=value}var type,size;function setIndex(index){if(index.array instanceof Uint32Array&&extensions.get("OES_element_index_uint")){type=_gl.UNSIGNED_INT;size=4}else{type=_gl.UNSIGNED_SHORT;size=2}}function render(start,count){_gl.drawElements(mode,count,type,start*size);_infoRender.calls++;_infoRender.vertices+=count;if(mode===_gl.TRIANGLES)_infoRender.faces+=count/3}function renderInstances(geometry){var extension=extensions.get("ANGLE_instanced_arrays");if(extension===null){console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");return}var index=geometry.index;extension.drawElementsInstancedANGLE(mode,index.array.length,type,0,geometry.maxInstancedCount)}this.setMode=setMode;this.setIndex=setIndex;this.render=render;this.renderInstances=renderInstances};THREE.WebGLExtensions=function(gl){var extensions={};this.get=function(name){if(extensions[name]!==undefined){return extensions[name]}var extension;switch(name){case"EXT_texture_filter_anisotropic":extension=gl.getExtension("EXT_texture_filter_anisotropic")||gl.getExtension("MOZ_EXT_texture_filter_anisotropic")||gl.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":extension=gl.getExtension("WEBGL_compressed_texture_s3tc")||gl.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||gl.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":extension=gl.getExtension("WEBGL_compressed_texture_pvrtc")||gl.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;default:extension=gl.getExtension(name)}if(extension===null){console.warn("THREE.WebGLRenderer: "+name+" extension not supported.")}extensions[name]=extension;return extension}};THREE.WebGLCapabilities=function(gl,extensions,parameters){function getMaxPrecision(precision){if(precision==="highp"){if(gl.getShaderPrecisionFormat(gl.VERTEX_SHADER,gl.HIGH_FLOAT).precision>0&&gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER,gl.HIGH_FLOAT).precision>0){return"highp"}precision="mediump"}if(precision==="mediump"){if(gl.getShaderPrecisionFormat(gl.VERTEX_SHADER,gl.MEDIUM_FLOAT).precision>0&&gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER,gl.MEDIUM_FLOAT).precision>0){return"mediump"}}return"lowp"}this.getMaxPrecision=getMaxPrecision;this.precision=parameters.precision!==undefined?parameters.precision:"highp",this.logarithmicDepthBuffer=parameters.logarithmicDepthBuffer!==undefined?parameters.logarithmicDepthBuffer:false;this.maxTextures=gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS);this.maxVertexTextures=gl.getParameter(gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS);this.maxTextureSize=gl.getParameter(gl.MAX_TEXTURE_SIZE);this.maxCubemapSize=gl.getParameter(gl.MAX_CUBE_MAP_TEXTURE_SIZE);this.maxAttributes=gl.getParameter(gl.MAX_VERTEX_ATTRIBS);this.maxVertexUniforms=gl.getParameter(gl.MAX_VERTEX_UNIFORM_VECTORS);this.maxVaryings=gl.getParameter(gl.MAX_VARYING_VECTORS);this.maxFragmentUniforms=gl.getParameter(gl.MAX_FRAGMENT_UNIFORM_VECTORS);this.vertexTextures=this.maxVertexTextures>0;this.floatFragmentTextures=!!extensions.get("OES_texture_float");this.floatVertexTextures=this.vertexTextures&&this.floatFragmentTextures;var _maxPrecision=getMaxPrecision(this.precision);if(_maxPrecision!==this.precision){console.warn("THREE.WebGLRenderer:",this.precision,"not supported, using",_maxPrecision,"instead.");this.precision=_maxPrecision}if(this.logarithmicDepthBuffer){this.logarithmicDepthBuffer=!!extensions.get("EXT_frag_depth")}};THREE.WebGLGeometries=function(gl,properties,info){var geometries={};function get(object){var geometry=object.geometry;if(geometries[geometry.id]!==undefined){return geometries[geometry.id]}geometry.addEventListener("dispose",onGeometryDispose);var buffergeometry;if(geometry instanceof THREE.BufferGeometry){buffergeometry=geometry}else if(geometry instanceof THREE.Geometry){if(geometry._bufferGeometry===undefined){geometry._bufferGeometry=(new THREE.BufferGeometry).setFromObject(object)}buffergeometry=geometry._bufferGeometry}geometries[geometry.id]=buffergeometry;info.memory.geometries++;return buffergeometry}function onGeometryDispose(event){var geometry=event.target;var buffergeometry=geometries[geometry.id];deleteAttributes(buffergeometry.attributes);geometry.removeEventListener("dispose",onGeometryDispose);delete geometries[geometry.id];var property=properties.get(geometry);if(property.wireframe)deleteAttribute(property.wireframe);info.memory.geometries--}function getAttributeBuffer(attribute){if(attribute instanceof THREE.InterleavedBufferAttribute){return properties.get(attribute.data).__webglBuffer}return properties.get(attribute).__webglBuffer}function deleteAttribute(attribute){var buffer=getAttributeBuffer(attribute);if(buffer!==undefined){gl.deleteBuffer(buffer);removeAttributeBuffer(attribute)}}function deleteAttributes(attributes){for(var name in attributes){deleteAttribute(attributes[name])}}function removeAttributeBuffer(attribute){if(attribute instanceof THREE.InterleavedBufferAttribute){properties.delete(attribute.data)}else{properties.delete(attribute)}}this.get=get};THREE.WebGLObjects=function(gl,properties,info){var geometries=new THREE.WebGLGeometries(gl,properties,info);function update(object){var geometry=geometries.get(object);if(object.geometry instanceof THREE.Geometry){geometry.updateFromObject(object)}var index=geometry.index;var attributes=geometry.attributes;if(index!==null){updateAttribute(index,gl.ELEMENT_ARRAY_BUFFER)}for(var name in attributes){updateAttribute(attributes[name],gl.ARRAY_BUFFER)}var morphAttributes=geometry.morphAttributes;for(var name in morphAttributes){var array=morphAttributes[name];for(var i=0,l=array.length;i<l;i++){updateAttribute(array[i],gl.ARRAY_BUFFER)}}return geometry}function updateAttribute(attribute,bufferType){var data=attribute instanceof THREE.InterleavedBufferAttribute?attribute.data:attribute;var attributeProperties=properties.get(data);if(attributeProperties.__webglBuffer===undefined){createBuffer(attributeProperties,data,bufferType)}else if(attributeProperties.version!==data.version){updateBuffer(attributeProperties,data,bufferType)}}function createBuffer(attributeProperties,data,bufferType){attributeProperties.__webglBuffer=gl.createBuffer();gl.bindBuffer(bufferType,attributeProperties.__webglBuffer);var usage=data.dynamic?gl.DYNAMIC_DRAW:gl.STATIC_DRAW;gl.bufferData(bufferType,data.array,usage);attributeProperties.version=data.version}function updateBuffer(attributeProperties,data,bufferType){gl.bindBuffer(bufferType,attributeProperties.__webglBuffer);if(data.dynamic===false||data.updateRange.count===-1){gl.bufferSubData(bufferType,0,data.array)}else if(data.updateRange.count===0){console.error("THREE.WebGLObjects.updateBuffer: dynamic THREE.BufferAttribute marked as needsUpdate but updateRange.count is 0, ensure you are using set methods or updating manually.")}else{gl.bufferSubData(bufferType,data.updateRange.offset*data.array.BYTES_PER_ELEMENT,data.array.subarray(data.updateRange.offset,data.updateRange.offset+data.updateRange.count));data.updateRange.count=0}attributeProperties.version=data.version}function getAttributeBuffer(attribute){if(attribute instanceof THREE.InterleavedBufferAttribute){return properties.get(attribute.data).__webglBuffer}return properties.get(attribute).__webglBuffer}function getWireframeAttribute(geometry){var property=properties.get(geometry);if(property.wireframe!==undefined){return property.wireframe}var indices=[];var index=geometry.index;var attributes=geometry.attributes;var position=attributes.position;if(index!==null){var edges={};var array=index.array;for(var i=0,l=array.length;i<l;i+=3){var a=array[i+0];var b=array[i+1];var c=array[i+2];if(checkEdge(edges,a,b))indices.push(a,b);if(checkEdge(edges,b,c))indices.push(b,c);if(checkEdge(edges,c,a))indices.push(c,a)}}else{var array=attributes.position.array;for(var i=0,l=array.length/3-1;i<l;i+=3){var a=i+0;var b=i+1;var c=i+2;indices.push(a,b,b,c,c,a)}}var TypeArray=position.count>65535?Uint32Array:Uint16Array;var attribute=new THREE.BufferAttribute(new TypeArray(indices),1);updateAttribute(attribute,gl.ELEMENT_ARRAY_BUFFER);property.wireframe=attribute;return attribute}function checkEdge(edges,a,b){if(a>b){var tmp=a;a=b;b=tmp}var list=edges[a];if(list===undefined){edges[a]=[b];return true}else if(list.indexOf(b)===-1){list.push(b);return true}return false}this.getAttributeBuffer=getAttributeBuffer;this.getWireframeAttribute=getWireframeAttribute;this.update=update};THREE.WebGLProgram=function(){var programIdCount=0;function generateDefines(defines){var chunks=[];for(var name in defines){var value=defines[name];if(value===false)continue;chunks.push("#define "+name+" "+value)}return chunks.join("\n")}function fetchUniformLocations(gl,program,identifiers){var uniforms={};var n=gl.getProgramParameter(program,gl.ACTIVE_UNIFORMS);for(var i=0;i<n;i++){var info=gl.getActiveUniform(program,i);var name=info.name;var location=gl.getUniformLocation(program,name);var suffixPos=name.lastIndexOf("[0]");if(suffixPos!==-1&&suffixPos===name.length-3){uniforms[name.substr(0,suffixPos)]=location}uniforms[name]=location}return uniforms}function fetchAttributeLocations(gl,program,identifiers){var attributes={};var n=gl.getProgramParameter(program,gl.ACTIVE_ATTRIBUTES);for(var i=0;i<n;i++){var info=gl.getActiveAttrib(program,i);var name=info.name;attributes[name]=gl.getAttribLocation(program,name)}return attributes}function filterEmptyLine(string){return string!==""}return function WebGLProgram(renderer,code,material,parameters){var gl=renderer.context;var defines=material.defines;var vertexShader=material.__webglShader.vertexShader;var fragmentShader=material.__webglShader.fragmentShader;var shadowMapTypeDefine="SHADOWMAP_TYPE_BASIC";if(parameters.shadowMapType===THREE.PCFShadowMap){shadowMapTypeDefine="SHADOWMAP_TYPE_PCF"}else if(parameters.shadowMapType===THREE.PCFSoftShadowMap){shadowMapTypeDefine="SHADOWMAP_TYPE_PCF_SOFT"}var envMapTypeDefine="ENVMAP_TYPE_CUBE";var envMapModeDefine="ENVMAP_MODE_REFLECTION";var envMapBlendingDefine="ENVMAP_BLENDING_MULTIPLY";if(parameters.envMap){switch(material.envMap.mapping){case THREE.CubeReflectionMapping:case THREE.CubeRefractionMapping:envMapTypeDefine="ENVMAP_TYPE_CUBE";break;case THREE.EquirectangularReflectionMapping:case THREE.EquirectangularRefractionMapping:envMapTypeDefine="ENVMAP_TYPE_EQUIREC";break;case THREE.SphericalReflectionMapping:envMapTypeDefine="ENVMAP_TYPE_SPHERE";break}switch(material.envMap.mapping){case THREE.CubeRefractionMapping:case THREE.EquirectangularRefractionMapping:envMapModeDefine="ENVMAP_MODE_REFRACTION";break}switch(material.combine){case THREE.MultiplyOperation:envMapBlendingDefine="ENVMAP_BLENDING_MULTIPLY";break;case THREE.MixOperation:envMapBlendingDefine="ENVMAP_BLENDING_MIX";break;case THREE.AddOperation:envMapBlendingDefine="ENVMAP_BLENDING_ADD";break}}var gammaFactorDefine=renderer.gammaFactor>0?renderer.gammaFactor:1;var customDefines=generateDefines(defines);var program=gl.createProgram();var prefixVertex,prefixFragment;if(material instanceof THREE.RawShaderMaterial){prefixVertex="";prefixFragment=""}else{prefixVertex=["precision "+parameters.precision+" float;","precision "+parameters.precision+" int;","#define SHADER_NAME "+material.__webglShader.name,customDefines,parameters.supportsVertexTextures?"#define VERTEX_TEXTURES":"",renderer.gammaInput?"#define GAMMA_INPUT":"",renderer.gammaOutput?"#define GAMMA_OUTPUT":"","#define GAMMA_FACTOR "+gammaFactorDefine,"#define MAX_DIR_LIGHTS "+parameters.maxDirLights,"#define MAX_POINT_LIGHTS "+parameters.maxPointLights,"#define MAX_SPOT_LIGHTS "+parameters.maxSpotLights,"#define MAX_HEMI_LIGHTS "+parameters.maxHemiLights,"#define MAX_SHADOWS "+parameters.maxShadows,"#define MAX_BONES "+parameters.maxBones,parameters.map?"#define USE_MAP":"",parameters.envMap?"#define USE_ENVMAP":"",parameters.envMap?"#define "+envMapModeDefine:"",parameters.lightMap?"#define USE_LIGHTMAP":"",parameters.aoMap?"#define USE_AOMAP":"",parameters.emissiveMap?"#define USE_EMISSIVEMAP":"",parameters.bumpMap?"#define USE_BUMPMAP":"",parameters.normalMap?"#define USE_NORMALMAP":"",parameters.displacementMap&&parameters.supportsVertexTextures?"#define USE_DISPLACEMENTMAP":"",parameters.specularMap?"#define USE_SPECULARMAP":"",parameters.alphaMap?"#define USE_ALPHAMAP":"",parameters.vertexColors?"#define USE_COLOR":"",parameters.flatShading?"#define FLAT_SHADED":"",parameters.skinning?"#define USE_SKINNING":"",parameters.useVertexTexture?"#define BONE_TEXTURE":"",parameters.morphTargets?"#define USE_MORPHTARGETS":"",parameters.morphNormals&&parameters.flatShading===false?"#define USE_MORPHNORMALS":"",parameters.doubleSided?"#define DOUBLE_SIDED":"",parameters.flipSided?"#define FLIP_SIDED":"",parameters.shadowMapEnabled?"#define USE_SHADOWMAP":"",parameters.shadowMapEnabled?"#define "+shadowMapTypeDefine:"",parameters.shadowMapDebug?"#define SHADOWMAP_DEBUG":"",parameters.pointLightShadows>0?"#define POINT_LIGHT_SHADOWS":"",parameters.sizeAttenuation?"#define USE_SIZEATTENUATION":"",parameters.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",parameters.logarithmicDepthBuffer&&renderer.extensions.get("EXT_frag_depth")?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_COLOR","	attribute vec3 color;","#endif","#ifdef USE_MORPHTARGETS","	attribute vec3 morphTarget0;","	attribute vec3 morphTarget1;","	attribute vec3 morphTarget2;","	attribute vec3 morphTarget3;","	#ifdef USE_MORPHNORMALS","		attribute vec3 morphNormal0;","		attribute vec3 morphNormal1;","		attribute vec3 morphNormal2;","		attribute vec3 morphNormal3;","	#else","		attribute vec3 morphTarget4;","		attribute vec3 morphTarget5;","		attribute vec3 morphTarget6;","		attribute vec3 morphTarget7;","	#endif","#endif","#ifdef USE_SKINNING","	attribute vec4 skinIndex;","	attribute vec4 skinWeight;","#endif","\n"].filter(filterEmptyLine).join("\n");

            prefixFragment=[parameters.bumpMap||parameters.normalMap||parameters.flatShading||material.derivatives?"#extension GL_OES_standard_derivatives : enable":"",parameters.logarithmicDepthBuffer&&renderer.extensions.get("EXT_frag_depth")?"#extension GL_EXT_frag_depth : enable":"","precision "+parameters.precision+" float;","precision "+parameters.precision+" int;","#define SHADER_NAME "+material.__webglShader.name,customDefines,"#define MAX_DIR_LIGHTS "+parameters.maxDirLights,"#define MAX_POINT_LIGHTS "+parameters.maxPointLights,"#define MAX_SPOT_LIGHTS "+parameters.maxSpotLights,"#define MAX_HEMI_LIGHTS "+parameters.maxHemiLights,"#define MAX_SHADOWS "+parameters.maxShadows,parameters.alphaTest?"#define ALPHATEST "+parameters.alphaTest:"",renderer.gammaInput?"#define GAMMA_INPUT":"",renderer.gammaOutput?"#define GAMMA_OUTPUT":"","#define GAMMA_FACTOR "+gammaFactorDefine,parameters.useFog&&parameters.fog?"#define USE_FOG":"",parameters.useFog&&parameters.fogExp?"#define FOG_EXP2":"",parameters.map?"#define USE_MAP":"",parameters.envMap?"#define USE_ENVMAP":"",parameters.envMap?"#define "+envMapTypeDefine:"",parameters.envMap?"#define "+envMapModeDefine:"",parameters.envMap?"#define "+envMapBlendingDefine:"",parameters.lightMap?"#define USE_LIGHTMAP":"",parameters.aoMap?"#define USE_AOMAP":"",parameters.emissiveMap?"#define USE_EMISSIVEMAP":"",parameters.bumpMap?"#define USE_BUMPMAP":"",parameters.normalMap?"#define USE_NORMALMAP":"",parameters.specularMap?"#define USE_SPECULARMAP":"",parameters.alphaMap?"#define USE_ALPHAMAP":"",parameters.vertexColors?"#define USE_COLOR":"",parameters.flatShading?"#define FLAT_SHADED":"",parameters.metal?"#define METAL":"",parameters.doubleSided?"#define DOUBLE_SIDED":"",parameters.flipSided?"#define FLIP_SIDED":"",parameters.shadowMapEnabled?"#define USE_SHADOWMAP":"",parameters.shadowMapEnabled?"#define "+shadowMapTypeDefine:"",parameters.shadowMapDebug?"#define SHADOWMAP_DEBUG":"",parameters.pointLightShadows>0?"#define POINT_LIGHT_SHADOWS":"",parameters.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",parameters.logarithmicDepthBuffer&&renderer.extensions.get("EXT_frag_depth")?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","\n"].filter(filterEmptyLine).join("\n")}var vertexGlsl=prefixVertex+vertexShader;var fragmentGlsl=prefixFragment+fragmentShader;var glVertexShader=THREE.WebGLShader(gl,gl.VERTEX_SHADER,vertexGlsl);var glFragmentShader=THREE.WebGLShader(gl,gl.FRAGMENT_SHADER,fragmentGlsl);gl.attachShader(program,glVertexShader);gl.attachShader(program,glFragmentShader);if(material.index0AttributeName!==undefined){gl.bindAttribLocation(program,0,material.index0AttributeName)}else if(parameters.morphTargets===true){gl.bindAttribLocation(program,0,"position")}gl.linkProgram(program);var programLog=gl.getProgramInfoLog(program);var vertexLog=gl.getShaderInfoLog(glVertexShader);var fragmentLog=gl.getShaderInfoLog(glFragmentShader);var runnable=true;var haveDiagnostics=true;if(gl.getProgramParameter(program,gl.LINK_STATUS)===false){runnable=false;console.error("THREE.WebGLProgram: shader error: ",gl.getError(),"gl.VALIDATE_STATUS",gl.getProgramParameter(program,gl.VALIDATE_STATUS),"gl.getProgramInfoLog",programLog,vertexLog,fragmentLog)}else if(programLog!==""){console.warn("THREE.WebGLProgram: gl.getProgramInfoLog()",programLog)}else if(vertexLog===""||fragmentLog===""){haveDiagnostics=false}if(haveDiagnostics){this.diagnostics={runnable:runnable,material:material,programLog:programLog,vertexShader:{log:vertexLog,prefix:prefixVertex},fragmentShader:{log:fragmentLog,prefix:prefixFragment}}}gl.deleteShader(glVertexShader);gl.deleteShader(glFragmentShader);var cachedUniforms;this.getUniforms=function(){if(cachedUniforms===undefined){cachedUniforms=fetchUniformLocations(gl,program)}return cachedUniforms};var cachedAttributes;this.getAttributes=function(){if(cachedAttributes===undefined){cachedAttributes=fetchAttributeLocations(gl,program)}return cachedAttributes};this.destroy=function(){gl.deleteProgram(program);this.program=undefined};Object.defineProperties(this,{uniforms:{get:function(){console.warn("THREE.WebGLProgram: .uniforms is now .getUniforms().");return this.getUniforms()}},attributes:{get:function(){console.warn("THREE.WebGLProgram: .attributes is now .getAttributes().");return this.getAttributes()}}});this.id=programIdCount++;this.code=code;this.usedTimes=1;this.program=program;this.vertexShader=glVertexShader;this.fragmentShader=glFragmentShader;return this}}();THREE.WebGLPrograms=function(renderer,capabilities){var programs=[];var shaderIDs={MeshDepthMaterial:"depth",MeshNormalMaterial:"normal",MeshBasicMaterial:"basic",MeshLambertMaterial:"lambert",MeshPhongMaterial:"phong",LineBasicMaterial:"basic",LineDashedMaterial:"dashed",PointsMaterial:"points"};var parameterNames=["precision","supportsVertexTextures","map","envMap","envMapMode","lightMap","aoMap","emissiveMap","bumpMap","normalMap","displacementMap","specularMap","alphaMap","combine","vertexColors","fog","useFog","fogExp","flatShading","sizeAttenuation","logarithmicDepthBuffer","skinning","maxBones","useVertexTexture","morphTargets","morphNormals","maxMorphTargets","maxMorphNormals","maxDirLights","maxPointLights","maxSpotLights","maxHemiLights","maxShadows","shadowMapEnabled","pointLightShadows","shadowMapType","shadowMapDebug","alphaTest","metal","doubleSided","flipSided"];function allocateBones(object){if(capabilities.floatVertexTextures&&object&&object.skeleton&&object.skeleton.useVertexTexture){return 1024}else{var nVertexUniforms=capabilities.maxVertexUniforms;var nVertexMatrices=Math.floor((nVertexUniforms-20)/4);var maxBones=nVertexMatrices;if(object!==undefined&&object instanceof THREE.SkinnedMesh){maxBones=Math.min(object.skeleton.bones.length,maxBones);if(maxBones<object.skeleton.bones.length){console.warn("WebGLRenderer: too many bones - "+object.skeleton.bones.length+", this GPU supports just "+maxBones+" (try OpenGL instead of ANGLE)")}}return maxBones}}function allocateLights(lights){var dirLights=0;var pointLights=0;var spotLights=0;var hemiLights=0;for(var l=0,ll=lights.length;l<ll;l++){var light=lights[l];if(light.visible===false)continue;if(light instanceof THREE.DirectionalLight)dirLights++;if(light instanceof THREE.PointLight)pointLights++;if(light instanceof THREE.SpotLight)spotLights++;if(light instanceof THREE.HemisphereLight)hemiLights++}return{directional:dirLights,point:pointLights,spot:spotLights,hemi:hemiLights}}function allocateShadows(lights){var maxShadows=0;var pointLightShadows=0;for(var l=0,ll=lights.length;l<ll;l++){var light=lights[l];if(!light.castShadow)continue;if(light instanceof THREE.SpotLight||light instanceof THREE.DirectionalLight)maxShadows++;if(light instanceof THREE.PointLight){maxShadows++;pointLightShadows++}}return{maxShadows:maxShadows,pointLightShadows:pointLightShadows}}this.getParameters=function(material,lights,fog,object){var shaderID=shaderIDs[material.type];var maxLightCount=allocateLights(lights);var allocatedShadows=allocateShadows(lights);var maxBones=allocateBones(object);var precision=renderer.getPrecision();if(material.precision!==null){precision=capabilities.getMaxPrecision(material.precision);if(precision!==material.precision){console.warn("THREE.WebGLRenderer.initMaterial:",material.precision,"not supported, using",precision,"instead.")}}var parameters={shaderID:shaderID,precision:precision,supportsVertexTextures:capabilities.vertexTextures,map:!!material.map,envMap:!!material.envMap,envMapMode:material.envMap&&material.envMap.mapping,lightMap:!!material.lightMap,aoMap:!!material.aoMap,emissiveMap:!!material.emissiveMap,bumpMap:!!material.bumpMap,normalMap:!!material.normalMap,displacementMap:!!material.displacementMap,specularMap:!!material.specularMap,alphaMap:!!material.alphaMap,combine:material.combine,vertexColors:material.vertexColors,fog:fog,useFog:material.fog,fogExp:fog instanceof THREE.FogExp2,flatShading:material.shading===THREE.FlatShading,sizeAttenuation:material.sizeAttenuation,logarithmicDepthBuffer:capabilities.logarithmicDepthBuffer,skinning:material.skinning,maxBones:maxBones,useVertexTexture:capabilities.floatVertexTextures&&object&&object.skeleton&&object.skeleton.useVertexTexture,morphTargets:material.morphTargets,morphNormals:material.morphNormals,maxMorphTargets:renderer.maxMorphTargets,maxMorphNormals:renderer.maxMorphNormals,maxDirLights:maxLightCount.directional,maxPointLights:maxLightCount.point,maxSpotLights:maxLightCount.spot,maxHemiLights:maxLightCount.hemi,maxShadows:allocatedShadows.maxShadows,pointLightShadows:allocatedShadows.pointLightShadows,shadowMapEnabled:renderer.shadowMap.enabled&&object.receiveShadow&&allocatedShadows.maxShadows>0,shadowMapType:renderer.shadowMap.type,shadowMapDebug:renderer.shadowMap.debug,alphaTest:material.alphaTest,metal:material.metal,doubleSided:material.side===THREE.DoubleSide,flipSided:material.side===THREE.BackSide};return parameters};this.getProgramCode=function(material,parameters){var chunks=[];if(parameters.shaderID){chunks.push(parameters.shaderID)}else{chunks.push(material.fragmentShader);chunks.push(material.vertexShader)}if(material.defines!==undefined){for(var name in material.defines){chunks.push(name);chunks.push(material.defines[name])}}for(var i=0;i<parameterNames.length;i++){var parameterName=parameterNames[i];chunks.push(parameterName);chunks.push(parameters[parameterName])}return chunks.join()};this.acquireProgram=function(material,parameters,code){var program;for(var p=0,pl=programs.length;p<pl;p++){var programInfo=programs[p];if(programInfo.code===code){program=programInfo;++program.usedTimes;break}}if(program===undefined){program=new THREE.WebGLProgram(renderer,code,material,parameters);programs.push(program)}return program};this.releaseProgram=function(program){if(--program.usedTimes===0){var i=programs.indexOf(program);programs[i]=programs[programs.length-1];programs.pop();program.destroy()}};this.programs=programs};THREE.WebGLProperties=function(){var properties={};this.get=function(object){var uuid=object.uuid;var map=properties[uuid];if(map===undefined){map={};properties[uuid]=map}return map};this.delete=function(object){delete properties[object.uuid]};this.clear=function(){properties={}}};THREE.WebGLShader=function(){function addLineNumbers(string){var lines=string.split("\n");for(var i=0;i<lines.length;i++){lines[i]=i+1+": "+lines[i]}return lines.join("\n")}return function WebGLShader(gl,type,string){var shader=gl.createShader(type);gl.shaderSource(shader,string);gl.compileShader(shader);if(gl.getShaderParameter(shader,gl.COMPILE_STATUS)===false){console.error("THREE.WebGLShader: Shader couldn't compile.")}if(gl.getShaderInfoLog(shader)!==""){console.warn("THREE.WebGLShader: gl.getShaderInfoLog()",type===gl.VERTEX_SHADER?"vertex":"fragment",gl.getShaderInfoLog(shader),addLineNumbers(string))}return shader}}();THREE.WebGLShadowMap=function(_renderer,_lights,_objects){var _gl=_renderer.context,_state=_renderer.state,_frustum=new THREE.Frustum,_projScreenMatrix=new THREE.Matrix4,_min=new THREE.Vector3,_max=new THREE.Vector3,_lookTarget=new THREE.Vector3,_lightPositionWorld=new THREE.Vector3,_renderList=[],_MorphingFlag=1,_SkinningFlag=2,_NumberOfMaterialVariants=(_MorphingFlag|_SkinningFlag)+1,_depthMaterials=new Array(_NumberOfMaterialVariants),_distanceMaterials=new Array(_NumberOfMaterialVariants);var cubeDirections=[new THREE.Vector3(1,0,0),new THREE.Vector3(-1,0,0),new THREE.Vector3(0,0,1),new THREE.Vector3(0,0,-1),new THREE.Vector3(0,1,0),new THREE.Vector3(0,-1,0)];var cubeUps=[new THREE.Vector3(0,1,0),new THREE.Vector3(0,1,0),new THREE.Vector3(0,1,0),new THREE.Vector3(0,1,0),new THREE.Vector3(0,0,1),new THREE.Vector3(0,0,-1)];var cube2DViewPorts=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4];var _vector4=new THREE.Vector4;var depthShader=THREE.ShaderLib["depthRGBA"];var depthUniforms=THREE.UniformsUtils.clone(depthShader.uniforms);var distanceShader=THREE.ShaderLib["distanceRGBA"];var distanceUniforms=THREE.UniformsUtils.clone(distanceShader.uniforms);for(var i=0;i!==_NumberOfMaterialVariants;++i){var useMorphing=(i&_MorphingFlag)!==0;var useSkinning=(i&_SkinningFlag)!==0;var depthMaterial=new THREE.ShaderMaterial({uniforms:depthUniforms,vertexShader:depthShader.vertexShader,fragmentShader:depthShader.fragmentShader,morphTargets:useMorphing,skinning:useSkinning});depthMaterial._shadowPass=true;_depthMaterials[i]=depthMaterial;var distanceMaterial=new THREE.ShaderMaterial({uniforms:distanceUniforms,vertexShader:distanceShader.vertexShader,fragmentShader:distanceShader.fragmentShader,morphTargets:useMorphing,skinning:useSkinning});distanceMaterial._shadowPass=true;_distanceMaterials[i]=distanceMaterial}var scope=this;this.enabled=false;this.autoUpdate=true;this.needsUpdate=false;this.type=THREE.PCFShadowMap;this.cullFace=THREE.CullFaceFront;this.render=function(scene){var faceCount,isPointLight;if(scope.enabled===false)return;if(scope.autoUpdate===false&&scope.needsUpdate===false)return;_gl.clearColor(1,1,1,1);_state.disable(_gl.BLEND);_state.enable(_gl.CULL_FACE);_gl.frontFace(_gl.CCW);_gl.cullFace(scope.cullFace===THREE.CullFaceFront?_gl.FRONT:_gl.BACK);_state.setDepthTest(true);_renderer.getViewport(_vector4);for(var i=0,il=_lights.length;i<il;i++){var light=_lights[i];if(light.castShadow===true){var shadow=light.shadow;var shadowCamera=shadow.camera;var shadowMapSize=shadow.mapSize;if(light instanceof THREE.PointLight){faceCount=6;isPointLight=true;var vpWidth=shadowMapSize.x/4;var vpHeight=shadowMapSize.y/2;cube2DViewPorts[0].set(vpWidth*2,vpHeight,vpWidth,vpHeight);cube2DViewPorts[1].set(0,vpHeight,vpWidth,vpHeight);cube2DViewPorts[2].set(vpWidth*3,vpHeight,vpWidth,vpHeight);cube2DViewPorts[3].set(vpWidth,vpHeight,vpWidth,vpHeight);cube2DViewPorts[4].set(vpWidth*3,0,vpWidth,vpHeight);cube2DViewPorts[5].set(vpWidth,0,vpWidth,vpHeight)}else{faceCount=1;isPointLight=false}if(shadow.map===null){var shadowFilter=THREE.LinearFilter;if(scope.type===THREE.PCFSoftShadowMap){shadowFilter=THREE.NearestFilter}var pars={minFilter:shadowFilter,magFilter:shadowFilter,format:THREE.RGBAFormat};shadow.map=new THREE.WebGLRenderTarget(shadowMapSize.x,shadowMapSize.y,pars);shadow.matrix=new THREE.Matrix4;if(light instanceof THREE.SpotLight){shadowCamera.aspect=shadowMapSize.x/shadowMapSize.y}shadowCamera.updateProjectionMatrix()}var shadowMap=shadow.map;var shadowMatrix=shadow.matrix;_lightPositionWorld.setFromMatrixPosition(light.matrixWorld);shadowCamera.position.copy(_lightPositionWorld);_renderer.setRenderTarget(shadowMap);_renderer.clear();for(var face=0;face<faceCount;face++){if(isPointLight){_lookTarget.copy(shadowCamera.position);_lookTarget.add(cubeDirections[face]);shadowCamera.up.copy(cubeUps[face]);shadowCamera.lookAt(_lookTarget);var vpDimensions=cube2DViewPorts[face];_renderer.setViewport(vpDimensions.x,vpDimensions.y,vpDimensions.z,vpDimensions.w)}else{_lookTarget.setFromMatrixPosition(light.target.matrixWorld);shadowCamera.lookAt(_lookTarget)}shadowCamera.updateMatrixWorld();shadowCamera.matrixWorldInverse.getInverse(shadowCamera.matrixWorld);shadowMatrix.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1);shadowMatrix.multiply(shadowCamera.projectionMatrix);shadowMatrix.multiply(shadowCamera.matrixWorldInverse);_projScreenMatrix.multiplyMatrices(shadowCamera.projectionMatrix,shadowCamera.matrixWorldInverse);_frustum.setFromMatrix(_projScreenMatrix);_renderList.length=0;projectObject(scene,shadowCamera);for(var j=0,jl=_renderList.length;j<jl;j++){var object=_renderList[j];var geometry=_objects.update(object);var material=object.material;if(material instanceof THREE.MeshFaceMaterial){var groups=geometry.groups;var materials=material.materials;for(var k=0,kl=groups.length;k<kl;k++){var group=groups[k];var groupMaterial=materials[group.materialIndex];if(groupMaterial.visible===true){var depthMaterial=getDepthMaterial(object,groupMaterial,isPointLight,_lightPositionWorld);_renderer.renderBufferDirect(shadowCamera,_lights,null,geometry,depthMaterial,object,group)}}}else{var depthMaterial=getDepthMaterial(object,material,isPointLight,_lightPositionWorld);_renderer.renderBufferDirect(shadowCamera,_lights,null,geometry,depthMaterial,object,null)}}}_renderer.resetGLState()}}_renderer.setViewport(_vector4.x,_vector4.y,_vector4.z,_vector4.w);var clearColor=_renderer.getClearColor(),clearAlpha=_renderer.getClearAlpha();_renderer.setClearColor(clearColor,clearAlpha);_state.enable(_gl.BLEND);if(scope.cullFace===THREE.CullFaceFront){_gl.cullFace(_gl.BACK)}_renderer.resetGLState();scope.needsUpdate=false};function getDepthMaterial(object,material,isPointLight,lightPositionWorld){var geometry=object.geometry;var newMaterial=null;var materialVariants=_depthMaterials;var customMaterial=object.customDepthMaterial;if(isPointLight){materialVariants=_distanceMaterials;customMaterial=object.customDistanceMaterial}if(!customMaterial){var useMorphing=geometry.morphTargets!==undefined&&geometry.morphTargets.length>0&&material.morphTargets;var useSkinning=object instanceof THREE.SkinnedMesh&&material.skinning;var variantIndex=0;if(useMorphing)variantIndex|=_MorphingFlag;if(useSkinning)variantIndex|=_SkinningFlag;newMaterial=materialVariants[variantIndex]}else{newMaterial=customMaterial}newMaterial.visible=material.visible;newMaterial.wireframe=material.wireframe;newMaterial.wireframeLinewidth=material.wireframeLinewidth;if(isPointLight&&newMaterial.uniforms.lightPos!==undefined){newMaterial.uniforms.lightPos.value.copy(lightPositionWorld)}return newMaterial}function projectObject(object,camera){if(object.visible===false)return;if(object instanceof THREE.Mesh||object instanceof THREE.Line||object instanceof THREE.Points){if(object.castShadow&&(object.frustumCulled===false||_frustum.intersectsObject(object)===true)){var material=object.material;if(material.visible===true){object.modelViewMatrix.multiplyMatrices(camera.matrixWorldInverse,object.matrixWorld);_renderList.push(object)}}}var children=object.children;for(var i=0,l=children.length;i<l;i++){projectObject(children[i],camera)}}};THREE.WebGLState=function(gl,extensions,paramThreeToGL){var _this=this;var newAttributes=new Uint8Array(16);var enabledAttributes=new Uint8Array(16);var attributeDivisors=new Uint8Array(16);var capabilities={};var compressedTextureFormats=null;var currentBlending=null;var currentBlendEquation=null;var currentBlendSrc=null;var currentBlendDst=null;var currentBlendEquationAlpha=null;var currentBlendSrcAlpha=null;var currentBlendDstAlpha=null;var currentDepthFunc=null;var currentDepthWrite=null;var currentColorWrite=null;var currentFlipSided=null;var currentLineWidth=null;var currentPolygonOffsetFactor=null;var currentPolygonOffsetUnits=null;var maxTextures=gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS);var currentTextureSlot=undefined;var currentBoundTextures={};this.init=function(){gl.clearColor(0,0,0,1);gl.clearDepth(1);gl.clearStencil(0);this.enable(gl.DEPTH_TEST);gl.depthFunc(gl.LEQUAL);gl.frontFace(gl.CCW);gl.cullFace(gl.BACK);this.enable(gl.CULL_FACE);this.enable(gl.BLEND);gl.blendEquation(gl.FUNC_ADD);gl.blendFunc(gl.SRC_ALPHA,gl.ONE_MINUS_SRC_ALPHA)};this.initAttributes=function(){for(var i=0,l=newAttributes.length;i<l;i++){newAttributes[i]=0}};this.enableAttribute=function(attribute){newAttributes[attribute]=1;if(enabledAttributes[attribute]===0){gl.enableVertexAttribArray(attribute);enabledAttributes[attribute]=1}if(attributeDivisors[attribute]!==0){var extension=extensions.get("ANGLE_instanced_arrays");extension.vertexAttribDivisorANGLE(attribute,0);attributeDivisors[attribute]=0}};this.enableAttributeAndDivisor=function(attribute,meshPerAttribute,extension){newAttributes[attribute]=1;if(enabledAttributes[attribute]===0){gl.enableVertexAttribArray(attribute);enabledAttributes[attribute]=1}if(attributeDivisors[attribute]!==meshPerAttribute){extension.vertexAttribDivisorANGLE(attribute,meshPerAttribute);attributeDivisors[attribute]=meshPerAttribute}};this.disableUnusedAttributes=function(){for(var i=0,l=enabledAttributes.length;i<l;i++){if(enabledAttributes[i]!==newAttributes[i]){gl.disableVertexAttribArray(i);enabledAttributes[i]=0}}};this.enable=function(id){if(capabilities[id]!==true){gl.enable(id);capabilities[id]=true}};this.disable=function(id){if(capabilities[id]!==false){gl.disable(id);capabilities[id]=false}};this.getCompressedTextureFormats=function(){if(compressedTextureFormats===null){compressedTextureFormats=[];if(extensions.get("WEBGL_compressed_texture_pvrtc")||extensions.get("WEBGL_compressed_texture_s3tc")){var formats=gl.getParameter(gl.COMPRESSED_TEXTURE_FORMATS);for(var i=0;i<formats.length;i++){compressedTextureFormats.push(formats[i])}}}return compressedTextureFormats};this.setBlending=function(blending,blendEquation,blendSrc,blendDst,blendEquationAlpha,blendSrcAlpha,blendDstAlpha){if(blending!==currentBlending){if(blending===THREE.NoBlending){this.disable(gl.BLEND)}else if(blending===THREE.AdditiveBlending){this.enable(gl.BLEND);gl.blendEquation(gl.FUNC_ADD);gl.blendFunc(gl.SRC_ALPHA,gl.ONE)}else if(blending===THREE.SubtractiveBlending){this.enable(gl.BLEND);gl.blendEquation(gl.FUNC_ADD);gl.blendFunc(gl.ZERO,gl.ONE_MINUS_SRC_COLOR)}else if(blending===THREE.MultiplyBlending){this.enable(gl.BLEND);gl.blendEquation(gl.FUNC_ADD);gl.blendFunc(gl.ZERO,gl.SRC_COLOR)}else if(blending===THREE.CustomBlending){this.enable(gl.BLEND)}else{this.enable(gl.BLEND);gl.blendEquationSeparate(gl.FUNC_ADD,gl.FUNC_ADD);gl.blendFuncSeparate(gl.SRC_ALPHA,gl.ONE_MINUS_SRC_ALPHA,gl.ONE,gl.ONE_MINUS_SRC_ALPHA)}currentBlending=blending}if(blending===THREE.CustomBlending){blendEquationAlpha=blendEquationAlpha||blendEquation;blendSrcAlpha=blendSrcAlpha||blendSrc;blendDstAlpha=blendDstAlpha||blendDst;if(blendEquation!==currentBlendEquation||blendEquationAlpha!==currentBlendEquationAlpha){gl.blendEquationSeparate(paramThreeToGL(blendEquation),paramThreeToGL(blendEquationAlpha));currentBlendEquation=blendEquation;currentBlendEquationAlpha=blendEquationAlpha}if(blendSrc!==currentBlendSrc||blendDst!==currentBlendDst||blendSrcAlpha!==currentBlendSrcAlpha||blendDstAlpha!==currentBlendDstAlpha){gl.blendFuncSeparate(paramThreeToGL(blendSrc),paramThreeToGL(blendDst),paramThreeToGL(blendSrcAlpha),paramThreeToGL(blendDstAlpha));currentBlendSrc=blendSrc;currentBlendDst=blendDst;currentBlendSrcAlpha=blendSrcAlpha;currentBlendDstAlpha=blendDstAlpha}}else{currentBlendEquation=null;currentBlendSrc=null;currentBlendDst=null;currentBlendEquationAlpha=null;currentBlendSrcAlpha=null;currentBlendDstAlpha=null}};this.setDepthFunc=function(depthFunc){if(currentDepthFunc!==depthFunc){if(depthFunc){switch(depthFunc){case THREE.NeverDepth:gl.depthFunc(gl.NEVER);break;case THREE.AlwaysDepth:gl.depthFunc(gl.ALWAYS);break;case THREE.LessDepth:gl.depthFunc(gl.LESS);break;case THREE.LessEqualDepth:gl.depthFunc(gl.LEQUAL);break;case THREE.EqualDepth:gl.depthFunc(gl.EQUAL);break;case THREE.GreaterEqualDepth:gl.depthFunc(gl.GEQUAL);break;case THREE.GreaterDepth:gl.depthFunc(gl.GREATER);break;case THREE.NotEqualDepth:gl.depthFunc(gl.NOTEQUAL);break;default:gl.depthFunc(gl.LEQUAL)}}else{gl.depthFunc(gl.LEQUAL)}currentDepthFunc=depthFunc}};this.setDepthTest=function(depthTest){if(depthTest){this.enable(gl.DEPTH_TEST)}else{this.disable(gl.DEPTH_TEST)}};this.setDepthWrite=function(depthWrite){if(currentDepthWrite!==depthWrite){gl.depthMask(depthWrite);currentDepthWrite=depthWrite}};this.setColorWrite=function(colorWrite){if(currentColorWrite!==colorWrite){gl.colorMask(colorWrite,colorWrite,colorWrite,colorWrite);currentColorWrite=colorWrite}};this.setFlipSided=function(flipSided){if(currentFlipSided!==flipSided){if(flipSided){gl.frontFace(gl.CW)}else{gl.frontFace(gl.CCW)}currentFlipSided=flipSided}};this.setLineWidth=function(width){if(width!==currentLineWidth){gl.lineWidth(width);currentLineWidth=width}};this.setPolygonOffset=function(polygonOffset,factor,units){if(polygonOffset){this.enable(gl.POLYGON_OFFSET_FILL)}else{this.disable(gl.POLYGON_OFFSET_FILL)}if(polygonOffset&&(currentPolygonOffsetFactor!==factor||currentPolygonOffsetUnits!==units)){gl.polygonOffset(factor,units);currentPolygonOffsetFactor=factor;currentPolygonOffsetUnits=units}};this.setScissorTest=function(scissorTest){if(scissorTest){this.enable(gl.SCISSOR_TEST)}else{this.disable(gl.SCISSOR_TEST)}};this.activeTexture=function(webglSlot){if(webglSlot===undefined)webglSlot=gl.TEXTURE0+maxTextures-1;if(currentTextureSlot!==webglSlot){gl.activeTexture(webglSlot);currentTextureSlot=webglSlot}};this.bindTexture=function(webglType,webglTexture){if(currentTextureSlot===undefined){_this.activeTexture()}var boundTexture=currentBoundTextures[currentTextureSlot];if(boundTexture===undefined){boundTexture={type:undefined,texture:undefined};currentBoundTextures[currentTextureSlot]=boundTexture}if(boundTexture.type!==webglType||boundTexture.texture!==webglTexture){gl.bindTexture(webglType,webglTexture);boundTexture.type=webglType;boundTexture.texture=webglTexture}};this.compressedTexImage2D=function(){try{gl.compressedTexImage2D.apply(gl,arguments)}catch(error){console.error(error)}};this.texImage2D=function(){try{gl.texImage2D.apply(gl,arguments)}catch(error){console.error(error)}};this.reset=function(){for(var i=0;i<enabledAttributes.length;i++){if(enabledAttributes[i]===1){gl.disableVertexAttribArray(i);enabledAttributes[i]=0}}capabilities={};compressedTextureFormats=null;currentBlending=null;currentDepthWrite=null;currentColorWrite=null;currentFlipSided=null}};THREE.LensFlarePlugin=function(renderer,flares){var gl=renderer.context;var state=renderer.state;var vertexBuffer,elementBuffer;var program,attributes,uniforms;var hasVertexTexture;var tempTexture,occlusionTexture;function init(){var vertices=new Float32Array([-1,-1,0,0,1,-1,1,0,1,1,1,1,-1,1,0,1]);var faces=new Uint16Array([0,1,2,0,2,3]);vertexBuffer=gl.createBuffer();elementBuffer=gl.createBuffer();gl.bindBuffer(gl.ARRAY_BUFFER,vertexBuffer);gl.bufferData(gl.ARRAY_BUFFER,vertices,gl.STATIC_DRAW);gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,elementBuffer);gl.bufferData(gl.ELEMENT_ARRAY_BUFFER,faces,gl.STATIC_DRAW);tempTexture=gl.createTexture();occlusionTexture=gl.createTexture();state.bindTexture(gl.TEXTURE_2D,tempTexture);gl.texImage2D(gl.TEXTURE_2D,0,gl.RGB,16,16,0,gl.RGB,gl.UNSIGNED_BYTE,null);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.NEAREST);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.NEAREST);state.bindTexture(gl.TEXTURE_2D,occlusionTexture);gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,16,16,0,gl.RGBA,gl.UNSIGNED_BYTE,null);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.NEAREST);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.NEAREST);hasVertexTexture=gl.getParameter(gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS)>0;var shader;if(hasVertexTexture){shader={vertexShader:["uniform lowp int renderType;","uniform vec3 screenPosition;","uniform vec2 scale;","uniform float rotation;","uniform sampler2D occlusionMap;","attribute vec2 position;","attribute vec2 uv;","varying vec2 vUV;","varying float vVisibility;","void main() {","vUV = uv;","vec2 pos = position;","if ( renderType == 2 ) {","vec4 visibility = texture2D( occlusionMap, vec2( 0.1, 0.1 ) );","visibility += texture2D( occlusionMap, vec2( 0.5, 0.1 ) );","visibility += texture2D( occlusionMap, vec2( 0.9, 0.1 ) );","visibility += texture2D( occlusionMap, vec2( 0.9, 0.5 ) );","visibility += texture2D( occlusionMap, vec2( 0.9, 0.9 ) );","visibility += texture2D( occlusionMap, vec2( 0.5, 0.9 ) );","visibility += texture2D( occlusionMap, vec2( 0.1, 0.9 ) );","visibility += texture2D( occlusionMap, vec2( 0.1, 0.5 ) );","visibility += texture2D( occlusionMap, vec2( 0.5, 0.5 ) );","vVisibility =        visibility.r / 9.0;","vVisibility *= 1.0 - visibility.g / 9.0;","vVisibility *=       visibility.b / 9.0;","vVisibility *= 1.0 - visibility.a / 9.0;","pos.x = cos( rotation ) * position.x - sin( rotation ) * position.y;","pos.y = sin( rotation ) * position.x + cos( rotation ) * position.y;","}","gl_Position = vec4( ( pos * scale + screenPosition.xy ).xy, screenPosition.z, 1.0 );","}"].join("\n"),fragmentShader:["uniform lowp int renderType;","uniform sampler2D map;","uniform float opacity;","uniform vec3 color;","varying vec2 vUV;","varying float vVisibility;","void main() {","if ( renderType == 0 ) {","gl_FragColor = vec4( 1.0, 0.0, 1.0, 0.0 );","} else if ( renderType == 1 ) {","gl_FragColor = texture2D( map, vUV );","} else {","vec4 texture = texture2D( map, vUV );","texture.a *= opacity * vVisibility;","gl_FragColor = texture;","gl_FragColor.rgb *= color;","}","}"].join("\n")}}else{shader={vertexShader:["uniform lowp int renderType;","uniform vec3 screenPosition;","uniform vec2 scale;","uniform float rotation;","attribute vec2 position;","attribute vec2 uv;","varying vec2 vUV;","void main() {","vUV = uv;","vec2 pos = position;","if ( renderType == 2 ) {","pos.x = cos( rotation ) * position.x - sin( rotation ) * position.y;","pos.y = sin( rotation ) * position.x + cos( rotation ) * position.y;","}","gl_Position = vec4( ( pos * scale + screenPosition.xy ).xy, screenPosition.z, 1.0 );","}"].join("\n"),fragmentShader:["precision mediump float;","uniform lowp int renderType;","uniform sampler2D map;","uniform sampler2D occlusionMap;","uniform float opacity;","uniform vec3 color;","varying vec2 vUV;","void main() {","if ( renderType == 0 ) {","gl_FragColor = vec4( texture2D( map, vUV ).rgb, 0.0 );","} else if ( renderType == 1 ) {","gl_FragColor = texture2D( map, vUV );","} else {","float visibility = texture2D( occlusionMap, vec2( 0.5, 0.1 ) ).a;","visibility += texture2D( occlusionMap, vec2( 0.9, 0.5 ) ).a;","visibility += texture2D( occlusionMap, vec2( 0.5, 0.9 ) ).a;","visibility += texture2D( occlusionMap, vec2( 0.1, 0.5 ) ).a;","visibility = ( 1.0 - visibility / 4.0 );","vec4 texture = texture2D( map, vUV );","texture.a *= opacity * visibility;","gl_FragColor = texture;","gl_FragColor.rgb *= color;","}","}"].join("\n")}}program=createProgram(shader);attributes={vertex:gl.getAttribLocation(program,"position"),uv:gl.getAttribLocation(program,"uv")};uniforms={renderType:gl.getUniformLocation(program,"renderType"),map:gl.getUniformLocation(program,"map"),occlusionMap:gl.getUniformLocation(program,"occlusionMap"),opacity:gl.getUniformLocation(program,"opacity"),color:gl.getUniformLocation(program,"color"),scale:gl.getUniformLocation(program,"scale"),rotation:gl.getUniformLocation(program,"rotation"),screenPosition:gl.getUniformLocation(program,"screenPosition")}}this.render=function(scene,camera,viewportWidth,viewportHeight){if(flares.length===0)return;var tempPosition=new THREE.Vector3;var invAspect=viewportHeight/viewportWidth,halfViewportWidth=viewportWidth*.5,halfViewportHeight=viewportHeight*.5;var size=16/viewportHeight,scale=new THREE.Vector2(size*invAspect,size);var screenPosition=new THREE.Vector3(1,1,0),screenPositionPixels=new THREE.Vector2(1,1);if(program===undefined){init()}gl.useProgram(program);state.initAttributes();state.enableAttribute(attributes.vertex);state.enableAttribute(attributes.uv);state.disableUnusedAttributes();gl.uniform1i(uniforms.occlusionMap,0);gl.uniform1i(uniforms.map,1);gl.bindBuffer(gl.ARRAY_BUFFER,vertexBuffer);gl.vertexAttribPointer(attributes.vertex,2,gl.FLOAT,false,2*8,0);gl.vertexAttribPointer(attributes.uv,2,gl.FLOAT,false,2*8,8);gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,elementBuffer);state.disable(gl.CULL_FACE);gl.depthMask(false);for(var i=0,l=flares.length;i<l;i++){size=16/viewportHeight;scale.set(size*invAspect,size);var flare=flares[i];tempPosition.set(flare.matrixWorld.elements[12],flare.matrixWorld.elements[13],flare.matrixWorld.elements[14]);

            tempPosition.applyMatrix4(camera.matrixWorldInverse);tempPosition.applyProjection(camera.projectionMatrix);screenPosition.copy(tempPosition);screenPositionPixels.x=screenPosition.x*halfViewportWidth+halfViewportWidth;screenPositionPixels.y=screenPosition.y*halfViewportHeight+halfViewportHeight;if(hasVertexTexture||screenPositionPixels.x>0&&screenPositionPixels.x<viewportWidth&&screenPositionPixels.y>0&&screenPositionPixels.y<viewportHeight){state.activeTexture(gl.TEXTURE0);state.bindTexture(gl.TEXTURE_2D,null);state.activeTexture(gl.TEXTURE1);state.bindTexture(gl.TEXTURE_2D,tempTexture);gl.copyTexImage2D(gl.TEXTURE_2D,0,gl.RGB,screenPositionPixels.x-8,screenPositionPixels.y-8,16,16,0);gl.uniform1i(uniforms.renderType,0);gl.uniform2f(uniforms.scale,scale.x,scale.y);gl.uniform3f(uniforms.screenPosition,screenPosition.x,screenPosition.y,screenPosition.z);state.disable(gl.BLEND);state.enable(gl.DEPTH_TEST);gl.drawElements(gl.TRIANGLES,6,gl.UNSIGNED_SHORT,0);state.activeTexture(gl.TEXTURE0);state.bindTexture(gl.TEXTURE_2D,occlusionTexture);gl.copyTexImage2D(gl.TEXTURE_2D,0,gl.RGBA,screenPositionPixels.x-8,screenPositionPixels.y-8,16,16,0);gl.uniform1i(uniforms.renderType,1);state.disable(gl.DEPTH_TEST);state.activeTexture(gl.TEXTURE1);state.bindTexture(gl.TEXTURE_2D,tempTexture);gl.drawElements(gl.TRIANGLES,6,gl.UNSIGNED_SHORT,0);flare.positionScreen.copy(screenPosition);if(flare.customUpdateCallback){flare.customUpdateCallback(flare)}else{flare.updateLensFlares()}gl.uniform1i(uniforms.renderType,2);state.enable(gl.BLEND);for(var j=0,jl=flare.lensFlares.length;j<jl;j++){var sprite=flare.lensFlares[j];if(sprite.opacity>.001&&sprite.scale>.001){screenPosition.x=sprite.x;screenPosition.y=sprite.y;screenPosition.z=sprite.z;size=sprite.size*sprite.scale/viewportHeight;scale.x=size*invAspect;scale.y=size;gl.uniform3f(uniforms.screenPosition,screenPosition.x,screenPosition.y,screenPosition.z);gl.uniform2f(uniforms.scale,scale.x,scale.y);gl.uniform1f(uniforms.rotation,sprite.rotation);gl.uniform1f(uniforms.opacity,sprite.opacity);gl.uniform3f(uniforms.color,sprite.color.r,sprite.color.g,sprite.color.b);state.setBlending(sprite.blending,sprite.blendEquation,sprite.blendSrc,sprite.blendDst);renderer.setTexture(sprite.texture,1);gl.drawElements(gl.TRIANGLES,6,gl.UNSIGNED_SHORT,0)}}}}state.enable(gl.CULL_FACE);state.enable(gl.DEPTH_TEST);gl.depthMask(true);renderer.resetGLState()};function createProgram(shader){var program=gl.createProgram();var fragmentShader=gl.createShader(gl.FRAGMENT_SHADER);var vertexShader=gl.createShader(gl.VERTEX_SHADER);var prefix="precision "+renderer.getPrecision()+" float;\n";gl.shaderSource(fragmentShader,prefix+shader.fragmentShader);gl.shaderSource(vertexShader,prefix+shader.vertexShader);gl.compileShader(fragmentShader);gl.compileShader(vertexShader);gl.attachShader(program,fragmentShader);gl.attachShader(program,vertexShader);gl.linkProgram(program);return program}};THREE.SpritePlugin=function(renderer,sprites){var gl=renderer.context;var state=renderer.state;var vertexBuffer,elementBuffer;var program,attributes,uniforms;var texture;var spritePosition=new THREE.Vector3;var spriteRotation=new THREE.Quaternion;var spriteScale=new THREE.Vector3;function init(){var vertices=new Float32Array([-.5,-.5,0,0,.5,-.5,1,0,.5,.5,1,1,-.5,.5,0,1]);var faces=new Uint16Array([0,1,2,0,2,3]);vertexBuffer=gl.createBuffer();elementBuffer=gl.createBuffer();gl.bindBuffer(gl.ARRAY_BUFFER,vertexBuffer);gl.bufferData(gl.ARRAY_BUFFER,vertices,gl.STATIC_DRAW);gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,elementBuffer);gl.bufferData(gl.ELEMENT_ARRAY_BUFFER,faces,gl.STATIC_DRAW);program=createProgram();attributes={position:gl.getAttribLocation(program,"position"),uv:gl.getAttribLocation(program,"uv")};uniforms={uvOffset:gl.getUniformLocation(program,"uvOffset"),uvScale:gl.getUniformLocation(program,"uvScale"),rotation:gl.getUniformLocation(program,"rotation"),scale:gl.getUniformLocation(program,"scale"),color:gl.getUniformLocation(program,"color"),map:gl.getUniformLocation(program,"map"),opacity:gl.getUniformLocation(program,"opacity"),modelViewMatrix:gl.getUniformLocation(program,"modelViewMatrix"),projectionMatrix:gl.getUniformLocation(program,"projectionMatrix"),fogType:gl.getUniformLocation(program,"fogType"),fogDensity:gl.getUniformLocation(program,"fogDensity"),fogNear:gl.getUniformLocation(program,"fogNear"),fogFar:gl.getUniformLocation(program,"fogFar"),fogColor:gl.getUniformLocation(program,"fogColor"),alphaTest:gl.getUniformLocation(program,"alphaTest")};var canvas=document.createElement("canvas");canvas.width=8;canvas.height=8;var context=canvas.getContext("2d");context.fillStyle="white";context.fillRect(0,0,8,8);texture=new THREE.Texture(canvas);texture.needsUpdate=true}this.render=function(scene,camera){if(sprites.length===0)return;if(program===undefined){init()}gl.useProgram(program);state.initAttributes();state.enableAttribute(attributes.position);state.enableAttribute(attributes.uv);state.disableUnusedAttributes();state.disable(gl.CULL_FACE);state.enable(gl.BLEND);gl.bindBuffer(gl.ARRAY_BUFFER,vertexBuffer);gl.vertexAttribPointer(attributes.position,2,gl.FLOAT,false,2*8,0);gl.vertexAttribPointer(attributes.uv,2,gl.FLOAT,false,2*8,8);gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,elementBuffer);gl.uniformMatrix4fv(uniforms.projectionMatrix,false,camera.projectionMatrix.elements);state.activeTexture(gl.TEXTURE0);gl.uniform1i(uniforms.map,0);var oldFogType=0;var sceneFogType=0;var fog=scene.fog;if(fog){gl.uniform3f(uniforms.fogColor,fog.color.r,fog.color.g,fog.color.b);if(fog instanceof THREE.Fog){gl.uniform1f(uniforms.fogNear,fog.near);gl.uniform1f(uniforms.fogFar,fog.far);gl.uniform1i(uniforms.fogType,1);oldFogType=1;sceneFogType=1}else if(fog instanceof THREE.FogExp2){gl.uniform1f(uniforms.fogDensity,fog.density);gl.uniform1i(uniforms.fogType,2);oldFogType=2;sceneFogType=2}}else{gl.uniform1i(uniforms.fogType,0);oldFogType=0;sceneFogType=0}for(var i=0,l=sprites.length;i<l;i++){var sprite=sprites[i];sprite.modelViewMatrix.multiplyMatrices(camera.matrixWorldInverse,sprite.matrixWorld);sprite.z=-sprite.modelViewMatrix.elements[14]}sprites.sort(painterSortStable);var scale=[];for(var i=0,l=sprites.length;i<l;i++){var sprite=sprites[i];var material=sprite.material;gl.uniform1f(uniforms.alphaTest,material.alphaTest);gl.uniformMatrix4fv(uniforms.modelViewMatrix,false,sprite.modelViewMatrix.elements);sprite.matrixWorld.decompose(spritePosition,spriteRotation,spriteScale);scale[0]=spriteScale.x;scale[1]=spriteScale.y;var fogType=0;if(scene.fog&&material.fog){fogType=sceneFogType}if(oldFogType!==fogType){gl.uniform1i(uniforms.fogType,fogType);oldFogType=fogType}if(material.map!==null){gl.uniform2f(uniforms.uvOffset,material.map.offset.x,material.map.offset.y);gl.uniform2f(uniforms.uvScale,material.map.repeat.x,material.map.repeat.y)}else{gl.uniform2f(uniforms.uvOffset,0,0);gl.uniform2f(uniforms.uvScale,1,1)}gl.uniform1f(uniforms.opacity,material.opacity);gl.uniform3f(uniforms.color,material.color.r,material.color.g,material.color.b);gl.uniform1f(uniforms.rotation,material.rotation);gl.uniform2fv(uniforms.scale,scale);state.setBlending(material.blending,material.blendEquation,material.blendSrc,material.blendDst);state.setDepthTest(material.depthTest);state.setDepthWrite(material.depthWrite);if(material.map&&material.map.image&&material.map.image.width){renderer.setTexture(material.map,0)}else{renderer.setTexture(texture,0)}gl.drawElements(gl.TRIANGLES,6,gl.UNSIGNED_SHORT,0)}state.enable(gl.CULL_FACE);renderer.resetGLState()};function createProgram(){var program=gl.createProgram();var vertexShader=gl.createShader(gl.VERTEX_SHADER);var fragmentShader=gl.createShader(gl.FRAGMENT_SHADER);gl.shaderSource(vertexShader,["precision "+renderer.getPrecision()+" float;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform float rotation;","uniform vec2 scale;","uniform vec2 uvOffset;","uniform vec2 uvScale;","attribute vec2 position;","attribute vec2 uv;","varying vec2 vUV;","void main() {","vUV = uvOffset + uv * uvScale;","vec2 alignedPosition = position * scale;","vec2 rotatedPosition;","rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;","rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;","vec4 finalPosition;","finalPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );","finalPosition.xy += rotatedPosition;","finalPosition = projectionMatrix * finalPosition;","gl_Position = finalPosition;","}"].join("\n"));gl.shaderSource(fragmentShader,["precision "+renderer.getPrecision()+" float;","uniform vec3 color;","uniform sampler2D map;","uniform float opacity;","uniform int fogType;","uniform vec3 fogColor;","uniform float fogDensity;","uniform float fogNear;","uniform float fogFar;","uniform float alphaTest;","varying vec2 vUV;","void main() {","vec4 texture = texture2D( map, vUV );","if ( texture.a < alphaTest ) discard;","gl_FragColor = vec4( color * texture.xyz, texture.a * opacity );","if ( fogType > 0 ) {","float depth = gl_FragCoord.z / gl_FragCoord.w;","float fogFactor = 0.0;","if ( fogType == 1 ) {","fogFactor = smoothstep( fogNear, fogFar, depth );","} else {","const float LOG2 = 1.442695;","fogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );","fogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );","}","gl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );","}","}"].join("\n"));gl.compileShader(vertexShader);gl.compileShader(fragmentShader);gl.attachShader(program,vertexShader);gl.attachShader(program,fragmentShader);gl.linkProgram(program);return program}function painterSortStable(a,b){if(a.z!==b.z){return b.z-a.z}else{return b.id-a.id}}};THREE.CurveUtils={tangentQuadraticBezier:function(t,p0,p1,p2){return 2*(1-t)*(p1-p0)+2*t*(p2-p1)},tangentCubicBezier:function(t,p0,p1,p2,p3){return-3*p0*(1-t)*(1-t)+3*p1*(1-t)*(1-t)-6*t*p1*(1-t)+6*t*p2*(1-t)-3*t*t*p2+3*t*t*p3},tangentSpline:function(t,p0,p1,p2,p3){var h00=6*t*t-6*t;var h10=3*t*t-4*t+1;var h01=-6*t*t+6*t;var h11=3*t*t-2*t;return h00+h10+h01+h11},interpolate:function(p0,p1,p2,p3,t){var v0=(p2-p0)*.5;var v1=(p3-p1)*.5;var t2=t*t;var t3=t*t2;return(2*p1-2*p2+v0+v1)*t3+(-3*p1+3*p2-2*v0-v1)*t2+v0*t+p1}};THREE.GeometryUtils={merge:function(geometry1,geometry2,materialIndexOffset){console.warn("THREE.GeometryUtils: .merge() has been moved to Geometry. Use geometry.merge( geometry2, matrix, materialIndexOffset ) instead.");var matrix;if(geometry2 instanceof THREE.Mesh){geometry2.matrixAutoUpdate&&geometry2.updateMatrix();matrix=geometry2.matrix;geometry2=geometry2.geometry}geometry1.merge(geometry2,matrix,materialIndexOffset)},center:function(geometry){console.warn("THREE.GeometryUtils: .center() has been moved to Geometry. Use geometry.center() instead.");return geometry.center()}};THREE.ImageUtils={crossOrigin:undefined,loadTexture:function(url,mapping,onLoad,onError){console.warn("THREE.ImageUtils.loadTexture is being deprecated. Use THREE.TextureLoader() instead.");var loader=new THREE.TextureLoader;loader.setCrossOrigin(this.crossOrigin);var texture=loader.load(url,onLoad,undefined,onError);if(mapping)texture.mapping=mapping;return texture},loadTextureCube:function(urls,mapping,onLoad,onError){console.warn("THREE.ImageUtils.loadTextureCube is being deprecated. Use THREE.CubeTextureLoader() instead.");var loader=new THREE.CubeTextureLoader;loader.setCrossOrigin(this.crossOrigin);var texture=loader.load(urls,onLoad,undefined,onError);if(mapping)texture.mapping=mapping;return texture},loadCompressedTexture:function(){console.error("THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.")},loadCompressedTextureCube:function(){console.error("THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.")}};THREE.SceneUtils={createMultiMaterialObject:function(geometry,materials){var group=new THREE.Group;for(var i=0,l=materials.length;i<l;i++){group.add(new THREE.Mesh(geometry,materials[i]))}return group},detach:function(child,parent,scene){child.applyMatrix(parent.matrixWorld);parent.remove(child);scene.add(child)},attach:function(child,scene,parent){var matrixWorldInverse=new THREE.Matrix4;matrixWorldInverse.getInverse(parent.matrixWorld);child.applyMatrix(matrixWorldInverse);scene.remove(child);parent.add(child)}};THREE.ShapeUtils={area:function(contour){var n=contour.length;var a=0;for(var p=n-1,q=0;q<n;p=q++){a+=contour[p].x*contour[q].y-contour[q].x*contour[p].y}return a*.5},triangulate:function(){function snip(contour,u,v,w,n,verts){var p;var ax,ay,bx,by;var cx,cy,px,py;ax=contour[verts[u]].x;ay=contour[verts[u]].y;bx=contour[verts[v]].x;by=contour[verts[v]].y;cx=contour[verts[w]].x;cy=contour[verts[w]].y;if(Number.EPSILON>(bx-ax)*(cy-ay)-(by-ay)*(cx-ax))return false;var aX,aY,bX,bY,cX,cY;var apx,apy,bpx,bpy,cpx,cpy;var cCROSSap,bCROSScp,aCROSSbp;aX=cx-bx;aY=cy-by;bX=ax-cx;bY=ay-cy;cX=bx-ax;cY=by-ay;for(p=0;p<n;p++){px=contour[verts[p]].x;py=contour[verts[p]].y;if(px===ax&&py===ay||px===bx&&py===by||px===cx&&py===cy)continue;apx=px-ax;apy=py-ay;bpx=px-bx;bpy=py-by;cpx=px-cx;cpy=py-cy;aCROSSbp=aX*bpy-aY*bpx;cCROSSap=cX*apy-cY*apx;bCROSScp=bX*cpy-bY*cpx;if(aCROSSbp>=-Number.EPSILON&&bCROSScp>=-Number.EPSILON&&cCROSSap>=-Number.EPSILON)return false}return true}return function(contour,indices){var n=contour.length;if(n<3)return null;var result=[],verts=[],vertIndices=[];var u,v,w;if(THREE.ShapeUtils.area(contour)>0){for(v=0;v<n;v++)verts[v]=v}else{for(v=0;v<n;v++)verts[v]=n-1-v}var nv=n;var count=2*nv;for(v=nv-1;nv>2;){if(count--<=0){console.warn("THREE.ShapeUtils: Unable to triangulate polygon! in triangulate()");if(indices)return vertIndices;return result}u=v;if(nv<=u)u=0;v=u+1;if(nv<=v)v=0;w=v+1;if(nv<=w)w=0;if(snip(contour,u,v,w,nv,verts)){var a,b,c,s,t;a=verts[u];b=verts[v];c=verts[w];result.push([contour[a],contour[b],contour[c]]);vertIndices.push([verts[u],verts[v],verts[w]]);for(s=v,t=v+1;t<nv;s++,t++){verts[s]=verts[t]}nv--;count=2*nv}}if(indices)return vertIndices;return result}}(),triangulateShape:function(contour,holes){function point_in_segment_2D_colin(inSegPt1,inSegPt2,inOtherPt){if(inSegPt1.x!==inSegPt2.x){if(inSegPt1.x<inSegPt2.x){return inSegPt1.x<=inOtherPt.x&&inOtherPt.x<=inSegPt2.x}else{return inSegPt2.x<=inOtherPt.x&&inOtherPt.x<=inSegPt1.x}}else{if(inSegPt1.y<inSegPt2.y){return inSegPt1.y<=inOtherPt.y&&inOtherPt.y<=inSegPt2.y}else{return inSegPt2.y<=inOtherPt.y&&inOtherPt.y<=inSegPt1.y}}}function intersect_segments_2D(inSeg1Pt1,inSeg1Pt2,inSeg2Pt1,inSeg2Pt2,inExcludeAdjacentSegs){var seg1dx=inSeg1Pt2.x-inSeg1Pt1.x,seg1dy=inSeg1Pt2.y-inSeg1Pt1.y;var seg2dx=inSeg2Pt2.x-inSeg2Pt1.x,seg2dy=inSeg2Pt2.y-inSeg2Pt1.y;var seg1seg2dx=inSeg1Pt1.x-inSeg2Pt1.x;var seg1seg2dy=inSeg1Pt1.y-inSeg2Pt1.y;var limit=seg1dy*seg2dx-seg1dx*seg2dy;var perpSeg1=seg1dy*seg1seg2dx-seg1dx*seg1seg2dy;if(Math.abs(limit)>Number.EPSILON){var perpSeg2;if(limit>0){if(perpSeg1<0||perpSeg1>limit)return[];perpSeg2=seg2dy*seg1seg2dx-seg2dx*seg1seg2dy;if(perpSeg2<0||perpSeg2>limit)return[]}else{if(perpSeg1>0||perpSeg1<limit)return[];perpSeg2=seg2dy*seg1seg2dx-seg2dx*seg1seg2dy;if(perpSeg2>0||perpSeg2<limit)return[]}if(perpSeg2===0){if(inExcludeAdjacentSegs&&(perpSeg1===0||perpSeg1===limit))return[];return[inSeg1Pt1]}if(perpSeg2===limit){if(inExcludeAdjacentSegs&&(perpSeg1===0||perpSeg1===limit))return[];return[inSeg1Pt2]}if(perpSeg1===0)return[inSeg2Pt1];if(perpSeg1===limit)return[inSeg2Pt2];var factorSeg1=perpSeg2/limit;return[{x:inSeg1Pt1.x+factorSeg1*seg1dx,y:inSeg1Pt1.y+factorSeg1*seg1dy}]}else{if(perpSeg1!==0||seg2dy*seg1seg2dx!==seg2dx*seg1seg2dy)return[];var seg1Pt=seg1dx===0&&seg1dy===0;var seg2Pt=seg2dx===0&&seg2dy===0;if(seg1Pt&&seg2Pt){if(inSeg1Pt1.x!==inSeg2Pt1.x||inSeg1Pt1.y!==inSeg2Pt1.y)return[];return[inSeg1Pt1]}if(seg1Pt){if(!point_in_segment_2D_colin(inSeg2Pt1,inSeg2Pt2,inSeg1Pt1))return[];return[inSeg1Pt1]}if(seg2Pt){if(!point_in_segment_2D_colin(inSeg1Pt1,inSeg1Pt2,inSeg2Pt1))return[];return[inSeg2Pt1]}var seg1min,seg1max,seg1minVal,seg1maxVal;var seg2min,seg2max,seg2minVal,seg2maxVal;if(seg1dx!==0){if(inSeg1Pt1.x<inSeg1Pt2.x){seg1min=inSeg1Pt1;seg1minVal=inSeg1Pt1.x;seg1max=inSeg1Pt2;seg1maxVal=inSeg1Pt2.x}else{seg1min=inSeg1Pt2;seg1minVal=inSeg1Pt2.x;seg1max=inSeg1Pt1;seg1maxVal=inSeg1Pt1.x}if(inSeg2Pt1.x<inSeg2Pt2.x){seg2min=inSeg2Pt1;seg2minVal=inSeg2Pt1.x;seg2max=inSeg2Pt2;seg2maxVal=inSeg2Pt2.x}else{seg2min=inSeg2Pt2;seg2minVal=inSeg2Pt2.x;seg2max=inSeg2Pt1;seg2maxVal=inSeg2Pt1.x}}else{if(inSeg1Pt1.y<inSeg1Pt2.y){seg1min=inSeg1Pt1;seg1minVal=inSeg1Pt1.y;seg1max=inSeg1Pt2;seg1maxVal=inSeg1Pt2.y}else{seg1min=inSeg1Pt2;seg1minVal=inSeg1Pt2.y;seg1max=inSeg1Pt1;seg1maxVal=inSeg1Pt1.y}if(inSeg2Pt1.y<inSeg2Pt2.y){seg2min=inSeg2Pt1;seg2minVal=inSeg2Pt1.y;seg2max=inSeg2Pt2;seg2maxVal=inSeg2Pt2.y}else{seg2min=inSeg2Pt2;seg2minVal=inSeg2Pt2.y;seg2max=inSeg2Pt1;seg2maxVal=inSeg2Pt1.y}}if(seg1minVal<=seg2minVal){if(seg1maxVal<seg2minVal)return[];if(seg1maxVal===seg2minVal){if(inExcludeAdjacentSegs)return[];return[seg2min]}if(seg1maxVal<=seg2maxVal)return[seg2min,seg1max];return[seg2min,seg2max]}else{if(seg1minVal>seg2maxVal)return[];if(seg1minVal===seg2maxVal){if(inExcludeAdjacentSegs)return[];return[seg1min]}if(seg1maxVal<=seg2maxVal)return[seg1min,seg1max];return[seg1min,seg2max]}}}function isPointInsideAngle(inVertex,inLegFromPt,inLegToPt,inOtherPt){var legFromPtX=inLegFromPt.x-inVertex.x,legFromPtY=inLegFromPt.y-inVertex.y;var legToPtX=inLegToPt.x-inVertex.x,legToPtY=inLegToPt.y-inVertex.y;var otherPtX=inOtherPt.x-inVertex.x,otherPtY=inOtherPt.y-inVertex.y;var from2toAngle=legFromPtX*legToPtY-legFromPtY*legToPtX;var from2otherAngle=legFromPtX*otherPtY-legFromPtY*otherPtX;if(Math.abs(from2toAngle)>Number.EPSILON){var other2toAngle=otherPtX*legToPtY-otherPtY*legToPtX;if(from2toAngle>0){return from2otherAngle>=0&&other2toAngle>=0}else{return from2otherAngle>=0||other2toAngle>=0}}else{return from2otherAngle>0}}function removeHoles(contour,holes){var shape=contour.concat();var hole;function isCutLineInsideAngles(inShapeIdx,inHoleIdx){var lastShapeIdx=shape.length-1;var prevShapeIdx=inShapeIdx-1;if(prevShapeIdx<0)prevShapeIdx=lastShapeIdx;var nextShapeIdx=inShapeIdx+1;if(nextShapeIdx>lastShapeIdx)nextShapeIdx=0;var insideAngle=isPointInsideAngle(shape[inShapeIdx],shape[prevShapeIdx],shape[nextShapeIdx],hole[inHoleIdx]);if(!insideAngle){return false}var lastHoleIdx=hole.length-1;var prevHoleIdx=inHoleIdx-1;if(prevHoleIdx<0)prevHoleIdx=lastHoleIdx;var nextHoleIdx=inHoleIdx+1;if(nextHoleIdx>lastHoleIdx)nextHoleIdx=0;insideAngle=isPointInsideAngle(hole[inHoleIdx],hole[prevHoleIdx],hole[nextHoleIdx],shape[inShapeIdx]);if(!insideAngle){return false}return true}function intersectsShapeEdge(inShapePt,inHolePt){var sIdx,nextIdx,intersection;for(sIdx=0;sIdx<shape.length;sIdx++){nextIdx=sIdx+1;nextIdx%=shape.length;intersection=intersect_segments_2D(inShapePt,inHolePt,shape[sIdx],shape[nextIdx],true);if(intersection.length>0)return true}return false}var indepHoles=[];function intersectsHoleEdge(inShapePt,inHolePt){var ihIdx,chkHole,hIdx,nextIdx,intersection;for(ihIdx=0;ihIdx<indepHoles.length;ihIdx++){chkHole=holes[indepHoles[ihIdx]];for(hIdx=0;hIdx<chkHole.length;hIdx++){nextIdx=hIdx+1;nextIdx%=chkHole.length;intersection=intersect_segments_2D(inShapePt,inHolePt,chkHole[hIdx],chkHole[nextIdx],true);if(intersection.length>0)return true}}return false}var holeIndex,shapeIndex,shapePt,holePt,holeIdx,cutKey,failedCuts=[],tmpShape1,tmpShape2,tmpHole1,tmpHole2;for(var h=0,hl=holes.length;h<hl;h++){indepHoles.push(h)}var minShapeIndex=0;var counter=indepHoles.length*2;while(indepHoles.length>0){counter--;if(counter<0){console.log("Infinite Loop! Holes left:"+indepHoles.length+", Probably Hole outside Shape!");break}for(shapeIndex=minShapeIndex;shapeIndex<shape.length;shapeIndex++){shapePt=shape[shapeIndex];holeIndex=-1;for(var h=0;h<indepHoles.length;h++){holeIdx=indepHoles[h];cutKey=shapePt.x+":"+shapePt.y+":"+holeIdx;if(failedCuts[cutKey]!==undefined)continue;hole=holes[holeIdx];for(var h2=0;h2<hole.length;h2++){holePt=hole[h2];if(!isCutLineInsideAngles(shapeIndex,h2))continue;if(intersectsShapeEdge(shapePt,holePt))continue;if(intersectsHoleEdge(shapePt,holePt))continue;holeIndex=h2;indepHoles.splice(h,1);tmpShape1=shape.slice(0,shapeIndex+1);tmpShape2=shape.slice(shapeIndex);tmpHole1=hole.slice(holeIndex);tmpHole2=hole.slice(0,holeIndex+1);shape=tmpShape1.concat(tmpHole1).concat(tmpHole2).concat(tmpShape2);minShapeIndex=shapeIndex;break}if(holeIndex>=0)break;failedCuts[cutKey]=true}if(holeIndex>=0)break}}return shape}var i,il,f,face,key,index,allPointsMap={};var allpoints=contour.concat();for(var h=0,hl=holes.length;h<hl;h++){Array.prototype.push.apply(allpoints,holes[h])}for(i=0,il=allpoints.length;i<il;i++){key=allpoints[i].x+":"+allpoints[i].y;if(allPointsMap[key]!==undefined){console.warn("THREE.Shape: Duplicate point",key)}allPointsMap[key]=i}var shapeWithoutHoles=removeHoles(contour,holes);var triangles=THREE.ShapeUtils.triangulate(shapeWithoutHoles,false);for(i=0,il=triangles.length;i<il;i++){face=triangles[i];for(f=0;f<3;f++){key=face[f].x+":"+face[f].y;index=allPointsMap[key];if(index!==undefined){face[f]=index}}}return triangles.concat()},isClockWise:function(pts){return THREE.ShapeUtils.area(pts)<0},b2:function(){function b2p0(t,p){var k=1-t;return k*k*p}function b2p1(t,p){return 2*(1-t)*t*p}function b2p2(t,p){return t*t*p}return function(t,p0,p1,p2){return b2p0(t,p0)+b2p1(t,p1)+b2p2(t,p2)}}(),b3:function(){function b3p0(t,p){var k=1-t;return k*k*k*p}function b3p1(t,p){var k=1-t;return 3*k*k*t*p}function b3p2(t,p){var k=1-t;return 3*k*t*t*p}function b3p3(t,p){return t*t*t*p}return function(t,p0,p1,p2,p3){return b3p0(t,p0)+b3p1(t,p1)+b3p2(t,p2)+b3p3(t,p3)}}()};THREE.Audio=function(listener){THREE.Object3D.call(this);this.type="Audio";this.context=listener.context;this.source=this.context.createBufferSource();this.source.onended=this.onEnded.bind(this);this.gain=this.context.createGain();this.gain.connect(this.context.destination);this.panner=this.context.createPanner();this.panner.connect(this.gain);this.autoplay=false;this.startTime=0;this.playbackRate=1;this.isPlaying=false};THREE.Audio.prototype=Object.create(THREE.Object3D.prototype);THREE.Audio.prototype.constructor=THREE.Audio;THREE.Audio.prototype.load=function(file){var scope=this;var request=new XMLHttpRequest;request.open("GET",file,true);request.responseType="arraybuffer";request.onload=function(e){scope.context.decodeAudioData(this.response,function(buffer){scope.source.buffer=buffer;if(scope.autoplay)scope.play()})};request.send();return this};THREE.Audio.prototype.play=function(){if(this.isPlaying===true){console.warn("THREE.Audio: Audio is already playing.");return}var source=this.context.createBufferSource();source.buffer=this.source.buffer;source.loop=this.source.loop;source.onended=this.source.onended;source.start(0,this.startTime);source.playbackRate.value=this.playbackRate;this.isPlaying=true;this.source=source;this.connect()};THREE.Audio.prototype.pause=function(){this.source.stop();this.startTime=this.context.currentTime};THREE.Audio.prototype.stop=function(){this.source.stop();this.startTime=0};THREE.Audio.prototype.connect=function(){if(this.filter!==undefined){this.source.connect(this.filter);this.filter.connect(this.panner)}else{this.source.connect(this.panner)}};THREE.Audio.prototype.disconnect=function(){if(this.filter!==undefined){this.source.disconnect(this.filter);this.filter.disconnect(this.panner)}else{this.source.disconnect(this.panner)}};THREE.Audio.prototype.setFilter=function(value){if(this.isPlaying===true){this.disconnect();this.filter=value;this.connect()}else{this.filter=value}};THREE.Audio.prototype.getFilter=function(){return this.filter};THREE.Audio.prototype.setPlaybackRate=function(value){this.playbackRate=value;if(this.isPlaying===true){this.source.playbackRate.value=this.playbackRate}};THREE.Audio.prototype.getPlaybackRate=function(){return this.playbackRate};THREE.Audio.prototype.onEnded=function(){this.isPlaying=false};THREE.Audio.prototype.setLoop=function(value){this.source.loop=value};THREE.Audio.prototype.getLoop=function(){return this.source.loop};THREE.Audio.prototype.setRefDistance=function(value){this.panner.refDistance=value};THREE.Audio.prototype.getRefDistance=function(){return this.panner.refDistance};THREE.Audio.prototype.setRolloffFactor=function(value){this.panner.rolloffFactor=value};THREE.Audio.prototype.getRolloffFactor=function(){return this.panner.rolloffFactor};THREE.Audio.prototype.setVolume=function(value){this.gain.gain.value=value};THREE.Audio.prototype.getVolume=function(){return this.gain.gain.value};THREE.Audio.prototype.updateMatrixWorld=function(){var position=new THREE.Vector3;return function updateMatrixWorld(force){THREE.Object3D.prototype.updateMatrixWorld.call(this,force);position.setFromMatrixPosition(this.matrixWorld);this.panner.setPosition(position.x,position.y,position.z)}}();THREE.AudioListener=function(){THREE.Object3D.call(this);this.type="AudioListener";this.context=new(window.AudioContext||window.webkitAudioContext)};THREE.AudioListener.prototype=Object.create(THREE.Object3D.prototype);THREE.AudioListener.prototype.constructor=THREE.AudioListener;THREE.AudioListener.prototype.updateMatrixWorld=function(){var position=new THREE.Vector3;var quaternion=new THREE.Quaternion;var scale=new THREE.Vector3;var orientation=new THREE.Vector3;return function updateMatrixWorld(force){THREE.Object3D.prototype.updateMatrixWorld.call(this,force);var listener=this.context.listener;var up=this.up;this.matrixWorld.decompose(position,quaternion,scale);orientation.set(0,0,-1).applyQuaternion(quaternion);listener.setPosition(position.x,position.y,position.z);listener.setOrientation(orientation.x,orientation.y,orientation.z,up.x,up.y,up.z)}}();THREE.Curve=function(){};THREE.Curve.prototype={constructor:THREE.Curve,getPoint:function(t){console.warn("THREE.Curve: Warning, getPoint() not implemented!");return null},getPointAt:function(u){var t=this.getUtoTmapping(u);return this.getPoint(t)},getPoints:function(divisions){if(!divisions)divisions=5;var d,pts=[];for(d=0;d<=divisions;d++){pts.push(this.getPoint(d/divisions))}return pts},getSpacedPoints:function(divisions){if(!divisions)divisions=5;var d,pts=[];for(d=0;d<=divisions;d++){pts.push(this.getPointAt(d/divisions))}return pts},getLength:function(){var lengths=this.getLengths();return lengths[lengths.length-1]},getLengths:function(divisions){if(!divisions)divisions=this.__arcLengthDivisions?this.__arcLengthDivisions:200;if(this.cacheArcLengths&&this.cacheArcLengths.length===divisions+1&&!this.needsUpdate){return this.cacheArcLengths}this.needsUpdate=false;var cache=[];var current,last=this.getPoint(0);var p,sum=0;cache.push(0);for(p=1;p<=divisions;p++){current=this.getPoint(p/divisions);sum+=current.distanceTo(last);cache.push(sum);last=current}this.cacheArcLengths=cache;return cache},updateArcLengths:function(){this.needsUpdate=true;this.getLengths()},getUtoTmapping:function(u,distance){var arcLengths=this.getLengths();var i=0,il=arcLengths.length;var targetArcLength;if(distance){targetArcLength=distance}else{targetArcLength=u*arcLengths[il-1]}var low=0,high=il-1,comparison;while(low<=high){i=Math.floor(low+(high-low)/2);comparison=arcLengths[i]-targetArcLength;if(comparison<0){low=i+1}else if(comparison>0){high=i-1}else{high=i;break}}i=high;if(arcLengths[i]===targetArcLength){var t=i/(il-1);return t}var lengthBefore=arcLengths[i];var lengthAfter=arcLengths[i+1];var segmentLength=lengthAfter-lengthBefore;var segmentFraction=(targetArcLength-lengthBefore)/segmentLength;var t=(i+segmentFraction)/(il-1);return t},getTangent:function(t){var delta=1e-4;var t1=t-delta;var t2=t+delta;if(t1<0)t1=0;if(t2>1)t2=1;var pt1=this.getPoint(t1);var pt2=this.getPoint(t2);var vec=pt2.clone().sub(pt1);return vec.normalize()},getTangentAt:function(u){var t=this.getUtoTmapping(u);return this.getTangent(t)}};THREE.Curve.Utils=THREE.CurveUtils;THREE.Curve.create=function(constructor,getPointFunc){constructor.prototype=Object.create(THREE.Curve.prototype);constructor.prototype.constructor=constructor;constructor.prototype.getPoint=getPointFunc;return constructor};THREE.CurvePath=function(){this.curves=[];this.autoClose=false};THREE.CurvePath.prototype=Object.create(THREE.Curve.prototype);THREE.CurvePath.prototype.constructor=THREE.CurvePath;THREE.CurvePath.prototype.add=function(curve){this.curves.push(curve)};THREE.CurvePath.prototype.closePath=function(){var startPoint=this.curves[0].getPoint(0);var endPoint=this.curves[this.curves.length-1].getPoint(1);if(!startPoint.equals(endPoint)){this.curves.push(new THREE.LineCurve(endPoint,startPoint))}};THREE.CurvePath.prototype.getPoint=function(t){var d=t*this.getLength();var curveLengths=this.getCurveLengths();var i=0;while(i<curveLengths.length){if(curveLengths[i]>=d){var diff=curveLengths[i]-d;var curve=this.curves[i];var u=1-diff/curve.getLength();return curve.getPointAt(u)}i++}return null};THREE.CurvePath.prototype.getLength=function(){var lens=this.getCurveLengths();return lens[lens.length-1]};THREE.CurvePath.prototype.getCurveLengths=function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length){return this.cacheLengths}var lengths=[],sums=0;for(var i=0,l=this.curves.length;i<l;i++){sums+=this.curves[i].getLength();lengths.push(sums)}this.cacheLengths=lengths;return lengths};THREE.CurvePath.prototype.createPointsGeometry=function(divisions){var pts=this.getPoints(divisions,true);return this.createGeometry(pts)};THREE.CurvePath.prototype.createSpacedPointsGeometry=function(divisions){var pts=this.getSpacedPoints(divisions,true);return this.createGeometry(pts)};THREE.CurvePath.prototype.createGeometry=function(points){var geometry=new THREE.Geometry;for(var i=0,l=points.length;i<l;i++){var point=points[i];geometry.vertices.push(new THREE.Vector3(point.x,point.y,point.z||0))}return geometry};THREE.Path=function(points){THREE.CurvePath.call(this);this.actions=[];if(points){this.fromPoints(points)}};THREE.Path.prototype=Object.create(THREE.CurvePath.prototype);THREE.Path.prototype.constructor=THREE.Path;THREE.Path.prototype.fromPoints=function(vectors){this.moveTo(vectors[0].x,vectors[0].y);for(var i=1,l=vectors.length;i<l;i++){this.lineTo(vectors[i].x,vectors[i].y)}};THREE.Path.prototype.moveTo=function(x,y){this.actions.push({action:"moveTo",args:[x,y]})};THREE.Path.prototype.lineTo=function(x,y){var lastargs=this.actions[this.actions.length-1].args;var x0=lastargs[lastargs.length-2];var y0=lastargs[lastargs.length-1];var curve=new THREE.LineCurve(new THREE.Vector2(x0,y0),new THREE.Vector2(x,y));this.curves.push(curve);this.actions.push({action:"lineTo",args:[x,y]})};THREE.Path.prototype.quadraticCurveTo=function(aCPx,aCPy,aX,aY){var lastargs=this.actions[this.actions.length-1].args;var x0=lastargs[lastargs.length-2];var y0=lastargs[lastargs.length-1];var curve=new THREE.QuadraticBezierCurve(new THREE.Vector2(x0,y0),new THREE.Vector2(aCPx,aCPy),new THREE.Vector2(aX,aY));this.curves.push(curve);this.actions.push({action:"quadraticCurveTo",args:[aCPx,aCPy,aX,aY]})};THREE.Path.prototype.bezierCurveTo=function(aCP1x,aCP1y,aCP2x,aCP2y,aX,aY){var lastargs=this.actions[this.actions.length-1].args;var x0=lastargs[lastargs.length-2];var y0=lastargs[lastargs.length-1];var curve=new THREE.CubicBezierCurve(new THREE.Vector2(x0,y0),new THREE.Vector2(aCP1x,aCP1y),new THREE.Vector2(aCP2x,aCP2y),new THREE.Vector2(aX,aY));this.curves.push(curve);this.actions.push({action:"bezierCurveTo",args:[aCP1x,aCP1y,aCP2x,aCP2y,aX,aY]})};THREE.Path.prototype.splineThru=function(pts){var args=Array.prototype.slice.call(arguments);var lastargs=this.actions[this.actions.length-1].args;var x0=lastargs[lastargs.length-2];var y0=lastargs[lastargs.length-1];var npts=[new THREE.Vector2(x0,y0)];Array.prototype.push.apply(npts,pts);var curve=new THREE.SplineCurve(npts);this.curves.push(curve);

            this.actions.push({action:"splineThru",args:args})};THREE.Path.prototype.arc=function(aX,aY,aRadius,aStartAngle,aEndAngle,aClockwise){var lastargs=this.actions[this.actions.length-1].args;var x0=lastargs[lastargs.length-2];var y0=lastargs[lastargs.length-1];this.absarc(aX+x0,aY+y0,aRadius,aStartAngle,aEndAngle,aClockwise)};THREE.Path.prototype.absarc=function(aX,aY,aRadius,aStartAngle,aEndAngle,aClockwise){this.absellipse(aX,aY,aRadius,aRadius,aStartAngle,aEndAngle,aClockwise)};THREE.Path.prototype.ellipse=function(aX,aY,xRadius,yRadius,aStartAngle,aEndAngle,aClockwise,aRotation){var lastargs=this.actions[this.actions.length-1].args;var x0=lastargs[lastargs.length-2];var y0=lastargs[lastargs.length-1];this.absellipse(aX+x0,aY+y0,xRadius,yRadius,aStartAngle,aEndAngle,aClockwise,aRotation)};THREE.Path.prototype.absellipse=function(aX,aY,xRadius,yRadius,aStartAngle,aEndAngle,aClockwise,aRotation){var args=[aX,aY,xRadius,yRadius,aStartAngle,aEndAngle,aClockwise,aRotation||0];var curve=new THREE.EllipseCurve(aX,aY,xRadius,yRadius,aStartAngle,aEndAngle,aClockwise,aRotation);this.curves.push(curve);var lastPoint=curve.getPoint(1);args.push(lastPoint.x);args.push(lastPoint.y);this.actions.push({action:"ellipse",args:args})};THREE.Path.prototype.getSpacedPoints=function(divisions,closedPath){if(!divisions)divisions=40;var points=[];for(var i=0;i<divisions;i++){points.push(this.getPoint(i/divisions))}return points};THREE.Path.prototype.getPoints=function(divisions,closedPath){divisions=divisions||12;var b2=THREE.ShapeUtils.b2;var b3=THREE.ShapeUtils.b3;var points=[];var cpx,cpy,cpx2,cpy2,cpx1,cpy1,cpx0,cpy0,laste,tx,ty;for(var i=0,l=this.actions.length;i<l;i++){var item=this.actions[i];var action=item.action;var args=item.args;switch(action){case"moveTo":points.push(new THREE.Vector2(args[0],args[1]));break;case"lineTo":points.push(new THREE.Vector2(args[0],args[1]));break;case"quadraticCurveTo":cpx=args[2];cpy=args[3];cpx1=args[0];cpy1=args[1];if(points.length>0){laste=points[points.length-1];cpx0=laste.x;cpy0=laste.y}else{laste=this.actions[i-1].args;cpx0=laste[laste.length-2];cpy0=laste[laste.length-1]}for(var j=1;j<=divisions;j++){var t=j/divisions;tx=b2(t,cpx0,cpx1,cpx);ty=b2(t,cpy0,cpy1,cpy);points.push(new THREE.Vector2(tx,ty))}break;case"bezierCurveTo":cpx=args[4];cpy=args[5];cpx1=args[0];cpy1=args[1];cpx2=args[2];cpy2=args[3];if(points.length>0){laste=points[points.length-1];cpx0=laste.x;cpy0=laste.y}else{laste=this.actions[i-1].args;cpx0=laste[laste.length-2];cpy0=laste[laste.length-1]}for(var j=1;j<=divisions;j++){var t=j/divisions;tx=b3(t,cpx0,cpx1,cpx2,cpx);ty=b3(t,cpy0,cpy1,cpy2,cpy);points.push(new THREE.Vector2(tx,ty))}break;case"splineThru":laste=this.actions[i-1].args;var last=new THREE.Vector2(laste[laste.length-2],laste[laste.length-1]);var spts=[last];var n=divisions*args[0].length;spts=spts.concat(args[0]);var spline=new THREE.SplineCurve(spts);for(var j=1;j<=n;j++){points.push(spline.getPointAt(j/n))}break;case"arc":var aX=args[0],aY=args[1],aRadius=args[2],aStartAngle=args[3],aEndAngle=args[4],aClockwise=!!args[5];var deltaAngle=aEndAngle-aStartAngle;var angle;var tdivisions=divisions*2;for(var j=1;j<=tdivisions;j++){var t=j/tdivisions;if(!aClockwise){t=1-t}angle=aStartAngle+t*deltaAngle;tx=aX+aRadius*Math.cos(angle);ty=aY+aRadius*Math.sin(angle);points.push(new THREE.Vector2(tx,ty))}break;case"ellipse":var aX=args[0],aY=args[1],xRadius=args[2],yRadius=args[3],aStartAngle=args[4],aEndAngle=args[5],aClockwise=!!args[6],aRotation=args[7];var deltaAngle=aEndAngle-aStartAngle;var angle;var tdivisions=divisions*2;var cos,sin;if(aRotation!==0){cos=Math.cos(aRotation);sin=Math.sin(aRotation)}for(var j=1;j<=tdivisions;j++){var t=j/tdivisions;if(!aClockwise){t=1-t}angle=aStartAngle+t*deltaAngle;tx=aX+xRadius*Math.cos(angle);ty=aY+yRadius*Math.sin(angle);if(aRotation!==0){var x=tx,y=ty;tx=(x-aX)*cos-(y-aY)*sin+aX;ty=(x-aX)*sin+(y-aY)*cos+aY}points.push(new THREE.Vector2(tx,ty))}break}}var lastPoint=points[points.length-1];if(Math.abs(lastPoint.x-points[0].x)<Number.EPSILON&&Math.abs(lastPoint.y-points[0].y)<Number.EPSILON)points.splice(points.length-1,1);if(closedPath){points.push(points[0])}return points};THREE.Path.prototype.toShapes=function(isCCW,noHoles){function extractSubpaths(inActions){var subPaths=[],lastPath=new THREE.Path;for(var i=0,l=inActions.length;i<l;i++){var item=inActions[i];var args=item.args;var action=item.action;if(action==="moveTo"){if(lastPath.actions.length!==0){subPaths.push(lastPath);lastPath=new THREE.Path}}lastPath[action].apply(lastPath,args)}if(lastPath.actions.length!==0){subPaths.push(lastPath)}return subPaths}function toShapesNoHoles(inSubpaths){var shapes=[];for(var i=0,l=inSubpaths.length;i<l;i++){var tmpPath=inSubpaths[i];var tmpShape=new THREE.Shape;tmpShape.actions=tmpPath.actions;tmpShape.curves=tmpPath.curves;shapes.push(tmpShape)}return shapes}function isPointInsidePolygon(inPt,inPolygon){var polyLen=inPolygon.length;var inside=false;for(var p=polyLen-1,q=0;q<polyLen;p=q++){var edgeLowPt=inPolygon[p];var edgeHighPt=inPolygon[q];var edgeDx=edgeHighPt.x-edgeLowPt.x;var edgeDy=edgeHighPt.y-edgeLowPt.y;if(Math.abs(edgeDy)>Number.EPSILON){if(edgeDy<0){edgeLowPt=inPolygon[q];edgeDx=-edgeDx;edgeHighPt=inPolygon[p];edgeDy=-edgeDy}if(inPt.y<edgeLowPt.y||inPt.y>edgeHighPt.y)continue;if(inPt.y===edgeLowPt.y){if(inPt.x===edgeLowPt.x)return true}else{var perpEdge=edgeDy*(inPt.x-edgeLowPt.x)-edgeDx*(inPt.y-edgeLowPt.y);if(perpEdge===0)return true;if(perpEdge<0)continue;inside=!inside}}else{if(inPt.y!==edgeLowPt.y)continue;if(edgeHighPt.x<=inPt.x&&inPt.x<=edgeLowPt.x||edgeLowPt.x<=inPt.x&&inPt.x<=edgeHighPt.x)return true}}return inside}var isClockWise=THREE.ShapeUtils.isClockWise;var subPaths=extractSubpaths(this.actions);if(subPaths.length===0)return[];if(noHoles===true)return toShapesNoHoles(subPaths);var solid,tmpPath,tmpShape,shapes=[];if(subPaths.length===1){tmpPath=subPaths[0];tmpShape=new THREE.Shape;tmpShape.actions=tmpPath.actions;tmpShape.curves=tmpPath.curves;shapes.push(tmpShape);return shapes}var holesFirst=!isClockWise(subPaths[0].getPoints());holesFirst=isCCW?!holesFirst:holesFirst;var betterShapeHoles=[];var newShapes=[];var newShapeHoles=[];var mainIdx=0;var tmpPoints;newShapes[mainIdx]=undefined;newShapeHoles[mainIdx]=[];for(var i=0,l=subPaths.length;i<l;i++){tmpPath=subPaths[i];tmpPoints=tmpPath.getPoints();solid=isClockWise(tmpPoints);solid=isCCW?!solid:solid;if(solid){if(!holesFirst&&newShapes[mainIdx])mainIdx++;newShapes[mainIdx]={s:new THREE.Shape,p:tmpPoints};newShapes[mainIdx].s.actions=tmpPath.actions;newShapes[mainIdx].s.curves=tmpPath.curves;if(holesFirst)mainIdx++;newShapeHoles[mainIdx]=[]}else{newShapeHoles[mainIdx].push({h:tmpPath,p:tmpPoints[0]})}}if(!newShapes[0])return toShapesNoHoles(subPaths);if(newShapes.length>1){var ambiguous=false;var toChange=[];for(var sIdx=0,sLen=newShapes.length;sIdx<sLen;sIdx++){betterShapeHoles[sIdx]=[]}for(var sIdx=0,sLen=newShapes.length;sIdx<sLen;sIdx++){var sho=newShapeHoles[sIdx];for(var hIdx=0;hIdx<sho.length;hIdx++){var ho=sho[hIdx];var hole_unassigned=true;for(var s2Idx=0;s2Idx<newShapes.length;s2Idx++){if(isPointInsidePolygon(ho.p,newShapes[s2Idx].p)){if(sIdx!==s2Idx)toChange.push({froms:sIdx,tos:s2Idx,hole:hIdx});if(hole_unassigned){hole_unassigned=false;betterShapeHoles[s2Idx].push(ho)}else{ambiguous=true}}}if(hole_unassigned){betterShapeHoles[sIdx].push(ho)}}}if(toChange.length>0){if(!ambiguous)newShapeHoles=betterShapeHoles}}var tmpHoles;for(var i=0,il=newShapes.length;i<il;i++){tmpShape=newShapes[i].s;shapes.push(tmpShape);tmpHoles=newShapeHoles[i];for(var j=0,jl=tmpHoles.length;j<jl;j++){tmpShape.holes.push(tmpHoles[j].h)}}return shapes};THREE.Shape=function(){THREE.Path.apply(this,arguments);this.holes=[]};THREE.Shape.prototype=Object.create(THREE.Path.prototype);THREE.Shape.prototype.constructor=THREE.Shape;THREE.Shape.prototype.extrude=function(options){return new THREE.ExtrudeGeometry(this,options)};THREE.Shape.prototype.makeGeometry=function(options){return new THREE.ShapeGeometry(this,options)};THREE.Shape.prototype.getPointsHoles=function(divisions){var holesPts=[];for(var i=0,l=this.holes.length;i<l;i++){holesPts[i]=this.holes[i].getPoints(divisions)}return holesPts};THREE.Shape.prototype.extractAllPoints=function(divisions){return{shape:this.getPoints(divisions),holes:this.getPointsHoles(divisions)}};THREE.Shape.prototype.extractPoints=function(divisions){return this.extractAllPoints(divisions)};THREE.Shape.Utils=THREE.ShapeUtils;THREE.LineCurve=function(v1,v2){this.v1=v1;this.v2=v2};THREE.LineCurve.prototype=Object.create(THREE.Curve.prototype);THREE.LineCurve.prototype.constructor=THREE.LineCurve;THREE.LineCurve.prototype.getPoint=function(t){var point=this.v2.clone().sub(this.v1);point.multiplyScalar(t).add(this.v1);return point};THREE.LineCurve.prototype.getPointAt=function(u){return this.getPoint(u)};THREE.LineCurve.prototype.getTangent=function(t){var tangent=this.v2.clone().sub(this.v1);return tangent.normalize()};THREE.QuadraticBezierCurve=function(v0,v1,v2){this.v0=v0;this.v1=v1;this.v2=v2};THREE.QuadraticBezierCurve.prototype=Object.create(THREE.Curve.prototype);THREE.QuadraticBezierCurve.prototype.constructor=THREE.QuadraticBezierCurve;THREE.QuadraticBezierCurve.prototype.getPoint=function(t){var b2=THREE.ShapeUtils.b2;return new THREE.Vector2(b2(t,this.v0.x,this.v1.x,this.v2.x),b2(t,this.v0.y,this.v1.y,this.v2.y))};THREE.QuadraticBezierCurve.prototype.getTangent=function(t){var tangentQuadraticBezier=THREE.CurveUtils.tangentQuadraticBezier;return new THREE.Vector2(tangentQuadraticBezier(t,this.v0.x,this.v1.x,this.v2.x),tangentQuadraticBezier(t,this.v0.y,this.v1.y,this.v2.y)).normalize()};THREE.CubicBezierCurve=function(v0,v1,v2,v3){this.v0=v0;this.v1=v1;this.v2=v2;this.v3=v3};THREE.CubicBezierCurve.prototype=Object.create(THREE.Curve.prototype);THREE.CubicBezierCurve.prototype.constructor=THREE.CubicBezierCurve;THREE.CubicBezierCurve.prototype.getPoint=function(t){var b3=THREE.ShapeUtils.b3;return new THREE.Vector2(b3(t,this.v0.x,this.v1.x,this.v2.x,this.v3.x),b3(t,this.v0.y,this.v1.y,this.v2.y,this.v3.y))};THREE.CubicBezierCurve.prototype.getTangent=function(t){var tangentCubicBezier=THREE.CurveUtils.tangentCubicBezier;return new THREE.Vector2(tangentCubicBezier(t,this.v0.x,this.v1.x,this.v2.x,this.v3.x),tangentCubicBezier(t,this.v0.y,this.v1.y,this.v2.y,this.v3.y)).normalize()};THREE.SplineCurve=function(points){this.points=points==undefined?[]:points};THREE.SplineCurve.prototype=Object.create(THREE.Curve.prototype);THREE.SplineCurve.prototype.constructor=THREE.SplineCurve;THREE.SplineCurve.prototype.getPoint=function(t){var points=this.points;var point=(points.length-1)*t;var intPoint=Math.floor(point);var weight=point-intPoint;var point0=points[intPoint===0?intPoint:intPoint-1];var point1=points[intPoint];var point2=points[intPoint>points.length-2?points.length-1:intPoint+1];var point3=points[intPoint>points.length-3?points.length-1:intPoint+2];var interpolate=THREE.CurveUtils.interpolate;return new THREE.Vector2(interpolate(point0.x,point1.x,point2.x,point3.x,weight),interpolate(point0.y,point1.y,point2.y,point3.y,weight))};THREE.EllipseCurve=function(aX,aY,xRadius,yRadius,aStartAngle,aEndAngle,aClockwise,aRotation){this.aX=aX;this.aY=aY;this.xRadius=xRadius;this.yRadius=yRadius;this.aStartAngle=aStartAngle;this.aEndAngle=aEndAngle;this.aClockwise=aClockwise;this.aRotation=aRotation||0};THREE.EllipseCurve.prototype=Object.create(THREE.Curve.prototype);THREE.EllipseCurve.prototype.constructor=THREE.EllipseCurve;THREE.EllipseCurve.prototype.getPoint=function(t){var deltaAngle=this.aEndAngle-this.aStartAngle;if(deltaAngle<0)deltaAngle+=Math.PI*2;if(deltaAngle>Math.PI*2)deltaAngle-=Math.PI*2;var angle;if(this.aClockwise===true){angle=this.aEndAngle+(1-t)*(Math.PI*2-deltaAngle)}else{angle=this.aStartAngle+t*deltaAngle}var x=this.aX+this.xRadius*Math.cos(angle);var y=this.aY+this.yRadius*Math.sin(angle);if(this.aRotation!==0){var cos=Math.cos(this.aRotation);var sin=Math.sin(this.aRotation);var tx=x,ty=y;x=(tx-this.aX)*cos-(ty-this.aY)*sin+this.aX;y=(tx-this.aX)*sin+(ty-this.aY)*cos+this.aY}return new THREE.Vector2(x,y)};THREE.ArcCurve=function(aX,aY,aRadius,aStartAngle,aEndAngle,aClockwise){THREE.EllipseCurve.call(this,aX,aY,aRadius,aRadius,aStartAngle,aEndAngle,aClockwise)};THREE.ArcCurve.prototype=Object.create(THREE.EllipseCurve.prototype);THREE.ArcCurve.prototype.constructor=THREE.ArcCurve;THREE.LineCurve3=THREE.Curve.create(function(v1,v2){this.v1=v1;this.v2=v2},function(t){var vector=new THREE.Vector3;vector.subVectors(this.v2,this.v1);vector.multiplyScalar(t);vector.add(this.v1);return vector});THREE.QuadraticBezierCurve3=THREE.Curve.create(function(v0,v1,v2){this.v0=v0;this.v1=v1;this.v2=v2},function(t){var b2=THREE.ShapeUtils.b2;return new THREE.Vector3(b2(t,this.v0.x,this.v1.x,this.v2.x),b2(t,this.v0.y,this.v1.y,this.v2.y),b2(t,this.v0.z,this.v1.z,this.v2.z))});THREE.CubicBezierCurve3=THREE.Curve.create(function(v0,v1,v2,v3){this.v0=v0;this.v1=v1;this.v2=v2;this.v3=v3},function(t){var b3=THREE.ShapeUtils.b3;return new THREE.Vector3(b3(t,this.v0.x,this.v1.x,this.v2.x,this.v3.x),b3(t,this.v0.y,this.v1.y,this.v2.y,this.v3.y),b3(t,this.v0.z,this.v1.z,this.v2.z,this.v3.z))});THREE.SplineCurve3=THREE.Curve.create(function(points){console.warn("THREE.SplineCurve3 will be deprecated. Please use THREE.CatmullRomCurve3");this.points=points==undefined?[]:points},function(t){var points=this.points;var point=(points.length-1)*t;var intPoint=Math.floor(point);var weight=point-intPoint;var point0=points[intPoint==0?intPoint:intPoint-1];var point1=points[intPoint];var point2=points[intPoint>points.length-2?points.length-1:intPoint+1];var point3=points[intPoint>points.length-3?points.length-1:intPoint+2];var interpolate=THREE.CurveUtils.interpolate;return new THREE.Vector3(interpolate(point0.x,point1.x,point2.x,point3.x,weight),interpolate(point0.y,point1.y,point2.y,point3.y,weight),interpolate(point0.z,point1.z,point2.z,point3.z,weight))});THREE.CatmullRomCurve3=function(){var tmp=new THREE.Vector3,px=new CubicPoly,py=new CubicPoly,pz=new CubicPoly;function CubicPoly(){}CubicPoly.prototype.init=function(x0,x1,t0,t1){this.c0=x0;this.c1=t0;this.c2=-3*x0+3*x1-2*t0-t1;this.c3=2*x0-2*x1+t0+t1};CubicPoly.prototype.initNonuniformCatmullRom=function(x0,x1,x2,x3,dt0,dt1,dt2){var t1=(x1-x0)/dt0-(x2-x0)/(dt0+dt1)+(x2-x1)/dt1;var t2=(x2-x1)/dt1-(x3-x1)/(dt1+dt2)+(x3-x2)/dt2;t1*=dt1;t2*=dt1;this.init(x1,x2,t1,t2)};CubicPoly.prototype.initCatmullRom=function(x0,x1,x2,x3,tension){this.init(x1,x2,tension*(x2-x0),tension*(x3-x1))};CubicPoly.prototype.calc=function(t){var t2=t*t;var t3=t2*t;return this.c0+this.c1*t+this.c2*t2+this.c3*t3};return THREE.Curve.create(function(p){this.points=p||[]},function(t){var points=this.points,point,intPoint,weight,l;l=points.length;if(l<2)console.log("duh, you need at least 2 points");point=(l-1)*t;intPoint=Math.floor(point);weight=point-intPoint;if(weight===0&&intPoint===l-1){intPoint=l-2;weight=1}var p0,p1,p2,p3;if(intPoint===0){tmp.subVectors(points[0],points[1]).add(points[0]);p0=tmp}else{p0=points[intPoint-1]}p1=points[intPoint];p2=points[intPoint+1];if(intPoint+2<l){p3=points[intPoint+2]}else{tmp.subVectors(points[l-1],points[l-2]).add(points[l-2]);p3=tmp}if(this.type===undefined||this.type==="centripetal"||this.type==="chordal"){var pow=this.type==="chordal"?.5:.25;var dt0=Math.pow(p0.distanceToSquared(p1),pow);var dt1=Math.pow(p1.distanceToSquared(p2),pow);var dt2=Math.pow(p2.distanceToSquared(p3),pow);if(dt1<1e-4)dt1=1;if(dt0<1e-4)dt0=dt1;if(dt2<1e-4)dt2=dt1;px.initNonuniformCatmullRom(p0.x,p1.x,p2.x,p3.x,dt0,dt1,dt2);py.initNonuniformCatmullRom(p0.y,p1.y,p2.y,p3.y,dt0,dt1,dt2);pz.initNonuniformCatmullRom(p0.z,p1.z,p2.z,p3.z,dt0,dt1,dt2)}else if(this.type==="catmullrom"){var tension=this.tension!==undefined?this.tension:.5;px.initCatmullRom(p0.x,p1.x,p2.x,p3.x,tension);py.initCatmullRom(p0.y,p1.y,p2.y,p3.y,tension);pz.initCatmullRom(p0.z,p1.z,p2.z,p3.z,tension)}var v=new THREE.Vector3(px.calc(weight),py.calc(weight),pz.calc(weight));return v})}();THREE.ClosedSplineCurve3=THREE.Curve.create(function(points){this.points=points==undefined?[]:points},function(t){var points=this.points;var point=(points.length-0)*t;var intPoint=Math.floor(point);var weight=point-intPoint;intPoint+=intPoint>0?0:(Math.floor(Math.abs(intPoint)/points.length)+1)*points.length;var point0=points[(intPoint-1)%points.length];var point1=points[intPoint%points.length];var point2=points[(intPoint+1)%points.length];var point3=points[(intPoint+2)%points.length];var interpolate=THREE.CurveUtils.interpolate;return new THREE.Vector3(interpolate(point0.x,point1.x,point2.x,point3.x,weight),interpolate(point0.y,point1.y,point2.y,point3.y,weight),interpolate(point0.z,point1.z,point2.z,point3.z,weight))});THREE.BoxGeometry=function(width,height,depth,widthSegments,heightSegments,depthSegments){THREE.Geometry.call(this);this.type="BoxGeometry";this.parameters={width:width,height:height,depth:depth,widthSegments:widthSegments,heightSegments:heightSegments,depthSegments:depthSegments};this.widthSegments=widthSegments||1;this.heightSegments=heightSegments||1;this.depthSegments=depthSegments||1;var scope=this;var width_half=width/2;var height_half=height/2;var depth_half=depth/2;buildPlane("z","y",-1,-1,depth,height,width_half,0);buildPlane("z","y",1,-1,depth,height,-width_half,1);buildPlane("x","z",1,1,width,depth,height_half,2);buildPlane("x","z",1,-1,width,depth,-height_half,3);buildPlane("x","y",1,-1,width,height,depth_half,4);buildPlane("x","y",-1,-1,width,height,-depth_half,5);function buildPlane(u,v,udir,vdir,width,height,depth,materialIndex){var w,ix,iy,gridX=scope.widthSegments,gridY=scope.heightSegments,width_half=width/2,height_half=height/2,offset=scope.vertices.length;if(u==="x"&&v==="y"||u==="y"&&v==="x"){w="z"}else if(u==="x"&&v==="z"||u==="z"&&v==="x"){w="y";gridY=scope.depthSegments}else if(u==="z"&&v==="y"||u==="y"&&v==="z"){w="x";gridX=scope.depthSegments}var gridX1=gridX+1,gridY1=gridY+1,segment_width=width/gridX,segment_height=height/gridY,normal=new THREE.Vector3;normal[w]=depth>0?1:-1;for(iy=0;iy<gridY1;iy++){for(ix=0;ix<gridX1;ix++){var vector=new THREE.Vector3;vector[u]=(ix*segment_width-width_half)*udir;vector[v]=(iy*segment_height-height_half)*vdir;vector[w]=depth;scope.vertices.push(vector)}}for(iy=0;iy<gridY;iy++){for(ix=0;ix<gridX;ix++){var a=ix+gridX1*iy;var b=ix+gridX1*(iy+1);var c=ix+1+gridX1*(iy+1);var d=ix+1+gridX1*iy;var uva=new THREE.Vector2(ix/gridX,1-iy/gridY);var uvb=new THREE.Vector2(ix/gridX,1-(iy+1)/gridY);var uvc=new THREE.Vector2((ix+1)/gridX,1-(iy+1)/gridY);var uvd=new THREE.Vector2((ix+1)/gridX,1-iy/gridY);var face=new THREE.Face3(a+offset,b+offset,d+offset);face.normal.copy(normal);face.vertexNormals.push(normal.clone(),normal.clone(),normal.clone());face.materialIndex=materialIndex;scope.faces.push(face);scope.faceVertexUvs[0].push([uva,uvb,uvd]);face=new THREE.Face3(b+offset,c+offset,d+offset);face.normal.copy(normal);face.vertexNormals.push(normal.clone(),normal.clone(),normal.clone());face.materialIndex=materialIndex;scope.faces.push(face);scope.faceVertexUvs[0].push([uvb.clone(),uvc,uvd.clone()])}}}this.mergeVertices()};THREE.BoxGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.BoxGeometry.prototype.constructor=THREE.BoxGeometry;THREE.BoxGeometry.prototype.clone=function(){var parameters=this.parameters;return new THREE.BoxGeometry(parameters.width,parameters.height,parameters.depth,parameters.widthSegments,parameters.heightSegments,parameters.depthSegments)};THREE.CubeGeometry=THREE.BoxGeometry;THREE.CircleGeometry=function(radius,segments,thetaStart,thetaLength){THREE.Geometry.call(this);this.type="CircleGeometry";this.parameters={radius:radius,segments:segments,thetaStart:thetaStart,thetaLength:thetaLength};this.fromBufferGeometry(new THREE.CircleBufferGeometry(radius,segments,thetaStart,thetaLength))};THREE.CircleGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.CircleGeometry.prototype.constructor=THREE.CircleGeometry;THREE.CircleGeometry.prototype.clone=function(){var parameters=this.parameters;return new THREE.CircleGeometry(parameters.radius,parameters.segments,parameters.thetaStart,parameters.thetaLength)};THREE.CircleBufferGeometry=function(radius,segments,thetaStart,thetaLength){THREE.BufferGeometry.call(this);this.type="CircleBufferGeometry";this.parameters={radius:radius,segments:segments,thetaStart:thetaStart,thetaLength:thetaLength};radius=radius||50;segments=segments!==undefined?Math.max(3,segments):8;thetaStart=thetaStart!==undefined?thetaStart:0;thetaLength=thetaLength!==undefined?thetaLength:Math.PI*2;var vertices=segments+2;var positions=new Float32Array(vertices*3);var normals=new Float32Array(vertices*3);var uvs=new Float32Array(vertices*2);normals[2]=1;uvs[0]=.5;uvs[1]=.5;for(var s=0,i=3,ii=2;s<=segments;s++,i+=3,ii+=2){var segment=thetaStart+s/segments*thetaLength;positions[i]=radius*Math.cos(segment);positions[i+1]=radius*Math.sin(segment);normals[i+2]=1;uvs[ii]=(positions[i]/radius+1)/2;uvs[ii+1]=(positions[i+1]/radius+1)/2}var indices=[];for(var i=1;i<=segments;i++){indices.push(i,i+1,0)}this.setIndex(new THREE.BufferAttribute(new Uint16Array(indices),1));this.addAttribute("position",new THREE.BufferAttribute(positions,3));this.addAttribute("normal",new THREE.BufferAttribute(normals,3));this.addAttribute("uv",new THREE.BufferAttribute(uvs,2));this.boundingSphere=new THREE.Sphere(new THREE.Vector3,radius)};THREE.CircleBufferGeometry.prototype=Object.create(THREE.BufferGeometry.prototype);THREE.CircleBufferGeometry.prototype.constructor=THREE.CircleBufferGeometry;THREE.CircleBufferGeometry.prototype.clone=function(){var parameters=this.parameters;return new THREE.CircleBufferGeometry(parameters.radius,parameters.segments,parameters.thetaStart,parameters.thetaLength)};THREE.CylinderGeometry=function(radiusTop,radiusBottom,height,radialSegments,heightSegments,openEnded,thetaStart,thetaLength){THREE.Geometry.call(this);this.type="CylinderGeometry";this.parameters={radiusTop:radiusTop,radiusBottom:radiusBottom,height:height,radialSegments:radialSegments,heightSegments:heightSegments,openEnded:openEnded,thetaStart:thetaStart,thetaLength:thetaLength};radiusTop=radiusTop!==undefined?radiusTop:20;radiusBottom=radiusBottom!==undefined?radiusBottom:20;height=height!==undefined?height:100;radialSegments=radialSegments||8;heightSegments=heightSegments||1;openEnded=openEnded!==undefined?openEnded:false;thetaStart=thetaStart!==undefined?thetaStart:0;thetaLength=thetaLength!==undefined?thetaLength:2*Math.PI;var heightHalf=height/2;var x,y,vertices=[],uvs=[];for(y=0;y<=heightSegments;y++){var verticesRow=[];var uvsRow=[];var v=y/heightSegments;var radius=v*(radiusBottom-radiusTop)+radiusTop;for(x=0;x<=radialSegments;x++){var u=x/radialSegments;var vertex=new THREE.Vector3;vertex.x=radius*Math.sin(u*thetaLength+thetaStart);vertex.y=-v*height+heightHalf;vertex.z=radius*Math.cos(u*thetaLength+thetaStart);this.vertices.push(vertex);verticesRow.push(this.vertices.length-1);uvsRow.push(new THREE.Vector2(u,1-v))}vertices.push(verticesRow);uvs.push(uvsRow)}var tanTheta=(radiusBottom-radiusTop)/height;var na,nb;for(x=0;x<radialSegments;x++){if(radiusTop!==0){na=this.vertices[vertices[0][x]].clone();nb=this.vertices[vertices[0][x+1]].clone()}else{na=this.vertices[vertices[1][x]].clone();nb=this.vertices[vertices[1][x+1]].clone()}na.setY(Math.sqrt(na.x*na.x+na.z*na.z)*tanTheta).normalize();nb.setY(Math.sqrt(nb.x*nb.x+nb.z*nb.z)*tanTheta).normalize();for(y=0;y<heightSegments;y++){var v1=vertices[y][x];var v2=vertices[y+1][x];var v3=vertices[y+1][x+1];var v4=vertices[y][x+1];var n1=na.clone();var n2=na.clone();var n3=nb.clone();var n4=nb.clone();var uv1=uvs[y][x].clone();var uv2=uvs[y+1][x].clone();var uv3=uvs[y+1][x+1].clone();var uv4=uvs[y][x+1].clone();this.faces.push(new THREE.Face3(v1,v2,v4,[n1,n2,n4]));this.faceVertexUvs[0].push([uv1,uv2,uv4]);this.faces.push(new THREE.Face3(v2,v3,v4,[n2.clone(),n3,n4.clone()]));this.faceVertexUvs[0].push([uv2.clone(),uv3,uv4.clone()])}}if(openEnded===false&&radiusTop>0){this.vertices.push(new THREE.Vector3(0,heightHalf,0));for(x=0;x<radialSegments;x++){var v1=vertices[0][x];var v2=vertices[0][x+1];var v3=this.vertices.length-1;var n1=new THREE.Vector3(0,1,0);var n2=new THREE.Vector3(0,1,0);var n3=new THREE.Vector3(0,1,0);var uv1=uvs[0][x].clone();var uv2=uvs[0][x+1].clone();var uv3=new THREE.Vector2(uv2.x,0);this.faces.push(new THREE.Face3(v1,v2,v3,[n1,n2,n3],undefined,1));this.faceVertexUvs[0].push([uv1,uv2,uv3])}}if(openEnded===false&&radiusBottom>0){this.vertices.push(new THREE.Vector3(0,-heightHalf,0));for(x=0;x<radialSegments;x++){var v1=vertices[heightSegments][x+1];var v2=vertices[heightSegments][x];var v3=this.vertices.length-1;var n1=new THREE.Vector3(0,-1,0);var n2=new THREE.Vector3(0,-1,0);var n3=new THREE.Vector3(0,-1,0);var uv1=uvs[heightSegments][x+1].clone();var uv2=uvs[heightSegments][x].clone();var uv3=new THREE.Vector2(uv2.x,1);this.faces.push(new THREE.Face3(v1,v2,v3,[n1,n2,n3],undefined,2));this.faceVertexUvs[0].push([uv1,uv2,uv3])}}this.computeFaceNormals()};THREE.CylinderGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.CylinderGeometry.prototype.constructor=THREE.CylinderGeometry;THREE.CylinderGeometry.prototype.clone=function(){var parameters=this.parameters;return new THREE.CylinderGeometry(parameters.radiusTop,parameters.radiusBottom,parameters.height,parameters.radialSegments,parameters.heightSegments,parameters.openEnded,parameters.thetaStart,parameters.thetaLength)};THREE.EdgesGeometry=function(geometry,thresholdAngle){THREE.BufferGeometry.call(this);thresholdAngle=thresholdAngle!==undefined?thresholdAngle:1;var thresholdDot=Math.cos(THREE.Math.degToRad(thresholdAngle));var edge=[0,0],hash={};function sortFunction(a,b){return a-b}var keys=["a","b","c"];var geometry2;if(geometry instanceof THREE.BufferGeometry){geometry2=new THREE.Geometry;geometry2.fromBufferGeometry(geometry)}else{geometry2=geometry.clone()}geometry2.mergeVertices();geometry2.computeFaceNormals();var vertices=geometry2.vertices;var faces=geometry2.faces;for(var i=0,l=faces.length;i<l;i++){var face=faces[i];for(var j=0;j<3;j++){edge[0]=face[keys[j]];edge[1]=face[keys[(j+1)%3]];edge.sort(sortFunction);var key=edge.toString();if(hash[key]===undefined){hash[key]={vert1:edge[0],vert2:edge[1],face1:i,face2:undefined}}else{hash[key].face2=i}}}var coords=[];for(var key in hash){var h=hash[key];if(h.face2===undefined||faces[h.face1].normal.dot(faces[h.face2].normal)<=thresholdDot){var vertex=vertices[h.vert1];coords.push(vertex.x);coords.push(vertex.y);coords.push(vertex.z);vertex=vertices[h.vert2];coords.push(vertex.x);coords.push(vertex.y);coords.push(vertex.z)}}this.addAttribute("position",new THREE.BufferAttribute(new Float32Array(coords),3))};THREE.EdgesGeometry.prototype=Object.create(THREE.BufferGeometry.prototype);THREE.EdgesGeometry.prototype.constructor=THREE.EdgesGeometry;THREE.ExtrudeGeometry=function(shapes,options){if(typeof shapes==="undefined"){shapes=[];return}THREE.Geometry.call(this);this.type="ExtrudeGeometry";shapes=Array.isArray(shapes)?shapes:[shapes];this.addShapeList(shapes,options);this.computeFaceNormals()};THREE.ExtrudeGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.ExtrudeGeometry.prototype.constructor=THREE.ExtrudeGeometry;THREE.ExtrudeGeometry.prototype.addShapeList=function(shapes,options){var sl=shapes.length;for(var s=0;s<sl;s++){var shape=shapes[s];this.addShape(shape,options)}};THREE.ExtrudeGeometry.prototype.addShape=function(shape,options){var amount=options.amount!==undefined?options.amount:100;var bevelThickness=options.bevelThickness!==undefined?options.bevelThickness:6;var bevelSize=options.bevelSize!==undefined?options.bevelSize:bevelThickness-2;var bevelSegments=options.bevelSegments!==undefined?options.bevelSegments:3;var bevelEnabled=options.bevelEnabled!==undefined?options.bevelEnabled:true;var curveSegments=options.curveSegments!==undefined?options.curveSegments:12;var steps=options.steps!==undefined?options.steps:1;var extrudePath=options.extrudePath;var extrudePts,extrudeByPath=false;var uvgen=options.UVGenerator!==undefined?options.UVGenerator:THREE.ExtrudeGeometry.WorldUVGenerator;var splineTube,binormal,normal,position2;if(extrudePath){extrudePts=extrudePath.getSpacedPoints(steps);extrudeByPath=true;bevelEnabled=false;splineTube=options.frames!==undefined?options.frames:new THREE.TubeGeometry.FrenetFrames(extrudePath,steps,false);binormal=new THREE.Vector3;normal=new THREE.Vector3;position2=new THREE.Vector3}if(!bevelEnabled){bevelSegments=0;bevelThickness=0;bevelSize=0}var ahole,h,hl;var scope=this;var shapesOffset=this.vertices.length;var shapePoints=shape.extractPoints(curveSegments);var vertices=shapePoints.shape;var holes=shapePoints.holes;var reverse=!THREE.ShapeUtils.isClockWise(vertices);if(reverse){vertices=vertices.reverse();for(h=0,hl=holes.length;h<hl;h++){ahole=holes[h];if(THREE.ShapeUtils.isClockWise(ahole)){holes[h]=ahole.reverse()}}reverse=false}var faces=THREE.ShapeUtils.triangulateShape(vertices,holes);var contour=vertices;for(h=0,hl=holes.length;h<hl;h++){ahole=holes[h];vertices=vertices.concat(ahole)}function scalePt2(pt,vec,size){if(!vec)console.error("THREE.ExtrudeGeometry: vec does not exist");return vec.clone().multiplyScalar(size).add(pt)}var b,bs,t,z,vert,vlen=vertices.length,face,flen=faces.length;function getBevelVec(inPt,inPrev,inNext){var v_trans_x,v_trans_y,shrink_by=1;var v_prev_x=inPt.x-inPrev.x,v_prev_y=inPt.y-inPrev.y;var v_next_x=inNext.x-inPt.x,v_next_y=inNext.y-inPt.y;var v_prev_lensq=v_prev_x*v_prev_x+v_prev_y*v_prev_y;var collinear0=v_prev_x*v_next_y-v_prev_y*v_next_x;if(Math.abs(collinear0)>Number.EPSILON){var v_prev_len=Math.sqrt(v_prev_lensq);var v_next_len=Math.sqrt(v_next_x*v_next_x+v_next_y*v_next_y);var ptPrevShift_x=inPrev.x-v_prev_y/v_prev_len;var ptPrevShift_y=inPrev.y+v_prev_x/v_prev_len;var ptNextShift_x=inNext.x-v_next_y/v_next_len;var ptNextShift_y=inNext.y+v_next_x/v_next_len;var sf=((ptNextShift_x-ptPrevShift_x)*v_next_y-(ptNextShift_y-ptPrevShift_y)*v_next_x)/(v_prev_x*v_next_y-v_prev_y*v_next_x);v_trans_x=ptPrevShift_x+v_prev_x*sf-inPt.x;v_trans_y=ptPrevShift_y+v_prev_y*sf-inPt.y;var v_trans_lensq=v_trans_x*v_trans_x+v_trans_y*v_trans_y;if(v_trans_lensq<=2){return new THREE.Vector2(v_trans_x,v_trans_y)}else{shrink_by=Math.sqrt(v_trans_lensq/2)}}else{var direction_eq=false;if(v_prev_x>Number.EPSILON){if(v_next_x>Number.EPSILON){direction_eq=true}}else{if(v_prev_x<-Number.EPSILON){if(v_next_x<-Number.EPSILON){direction_eq=true}}else{if(Math.sign(v_prev_y)===Math.sign(v_next_y)){direction_eq=true}}}if(direction_eq){v_trans_x=-v_prev_y;v_trans_y=v_prev_x;shrink_by=Math.sqrt(v_prev_lensq)}else{v_trans_x=v_prev_x;v_trans_y=v_prev_y;shrink_by=Math.sqrt(v_prev_lensq/2)}}return new THREE.Vector2(v_trans_x/shrink_by,v_trans_y/shrink_by)}var contourMovements=[];for(var i=0,il=contour.length,j=il-1,k=i+1;i<il;i++,j++,k++){if(j===il)j=0;if(k===il)k=0;contourMovements[i]=getBevelVec(contour[i],contour[j],contour[k])}var holesMovements=[],oneHoleMovements,verticesMovements=contourMovements.concat();for(h=0,hl=holes.length;h<hl;h++){ahole=holes[h];oneHoleMovements=[];for(i=0,il=ahole.length,j=il-1,k=i+1;i<il;i++,j++,k++){if(j===il)j=0;if(k===il)k=0;oneHoleMovements[i]=getBevelVec(ahole[i],ahole[j],ahole[k])}holesMovements.push(oneHoleMovements);verticesMovements=verticesMovements.concat(oneHoleMovements)}for(b=0;b<bevelSegments;b++){t=b/bevelSegments;z=bevelThickness*(1-t);bs=bevelSize*Math.sin(t*Math.PI/2);for(i=0,il=contour.length;i<il;i++){vert=scalePt2(contour[i],contourMovements[i],bs);v(vert.x,vert.y,-z)}for(h=0,hl=holes.length;h<hl;h++){ahole=holes[h];oneHoleMovements=holesMovements[h];for(i=0,il=ahole.length;i<il;i++){vert=scalePt2(ahole[i],oneHoleMovements[i],bs);v(vert.x,vert.y,-z)}}}bs=bevelSize;for(i=0;i<vlen;i++){vert=bevelEnabled?scalePt2(vertices[i],verticesMovements[i],bs):vertices[i];

            if(!extrudeByPath){v(vert.x,vert.y,0)}else{normal.copy(splineTube.normals[0]).multiplyScalar(vert.x);binormal.copy(splineTube.binormals[0]).multiplyScalar(vert.y);position2.copy(extrudePts[0]).add(normal).add(binormal);v(position2.x,position2.y,position2.z)}}var s;for(s=1;s<=steps;s++){for(i=0;i<vlen;i++){vert=bevelEnabled?scalePt2(vertices[i],verticesMovements[i],bs):vertices[i];if(!extrudeByPath){v(vert.x,vert.y,amount/steps*s)}else{normal.copy(splineTube.normals[s]).multiplyScalar(vert.x);binormal.copy(splineTube.binormals[s]).multiplyScalar(vert.y);position2.copy(extrudePts[s]).add(normal).add(binormal);v(position2.x,position2.y,position2.z)}}}for(b=bevelSegments-1;b>=0;b--){t=b/bevelSegments;z=bevelThickness*(1-t);bs=bevelSize*Math.sin(t*Math.PI/2);for(i=0,il=contour.length;i<il;i++){vert=scalePt2(contour[i],contourMovements[i],bs);v(vert.x,vert.y,amount+z)}for(h=0,hl=holes.length;h<hl;h++){ahole=holes[h];oneHoleMovements=holesMovements[h];for(i=0,il=ahole.length;i<il;i++){vert=scalePt2(ahole[i],oneHoleMovements[i],bs);if(!extrudeByPath){v(vert.x,vert.y,amount+z)}else{v(vert.x,vert.y+extrudePts[steps-1].y,extrudePts[steps-1].x+z)}}}}buildLidFaces();buildSideFaces();function buildLidFaces(){if(bevelEnabled){var layer=0;var offset=vlen*layer;for(i=0;i<flen;i++){face=faces[i];f3(face[2]+offset,face[1]+offset,face[0]+offset)}layer=steps+bevelSegments*2;offset=vlen*layer;for(i=0;i<flen;i++){face=faces[i];f3(face[0]+offset,face[1]+offset,face[2]+offset)}}else{for(i=0;i<flen;i++){face=faces[i];f3(face[2],face[1],face[0])}for(i=0;i<flen;i++){face=faces[i];f3(face[0]+vlen*steps,face[1]+vlen*steps,face[2]+vlen*steps)}}}function buildSideFaces(){var layeroffset=0;sidewalls(contour,layeroffset);layeroffset+=contour.length;for(h=0,hl=holes.length;h<hl;h++){ahole=holes[h];sidewalls(ahole,layeroffset);layeroffset+=ahole.length}}function sidewalls(contour,layeroffset){var j,k;i=contour.length;while(--i>=0){j=i;k=i-1;if(k<0)k=contour.length-1;var s=0,sl=steps+bevelSegments*2;for(s=0;s<sl;s++){var slen1=vlen*s;var slen2=vlen*(s+1);var a=layeroffset+j+slen1,b=layeroffset+k+slen1,c=layeroffset+k+slen2,d=layeroffset+j+slen2;f4(a,b,c,d,contour,s,sl,j,k)}}}function v(x,y,z){scope.vertices.push(new THREE.Vector3(x,y,z))}function f3(a,b,c){a+=shapesOffset;b+=shapesOffset;c+=shapesOffset;scope.faces.push(new THREE.Face3(a,b,c,null,null,0));var uvs=uvgen.generateTopUV(scope,a,b,c);scope.faceVertexUvs[0].push(uvs)}function f4(a,b,c,d,wallContour,stepIndex,stepsLength,contourIndex1,contourIndex2){a+=shapesOffset;b+=shapesOffset;c+=shapesOffset;d+=shapesOffset;scope.faces.push(new THREE.Face3(a,b,d,null,null,1));scope.faces.push(new THREE.Face3(b,c,d,null,null,1));var uvs=uvgen.generateSideWallUV(scope,a,b,c,d);scope.faceVertexUvs[0].push([uvs[0],uvs[1],uvs[3]]);scope.faceVertexUvs[0].push([uvs[1],uvs[2],uvs[3]])}};THREE.ExtrudeGeometry.WorldUVGenerator={generateTopUV:function(geometry,indexA,indexB,indexC){var vertices=geometry.vertices;var a=vertices[indexA];var b=vertices[indexB];var c=vertices[indexC];return[new THREE.Vector2(a.x,a.y),new THREE.Vector2(b.x,b.y),new THREE.Vector2(c.x,c.y)]},generateSideWallUV:function(geometry,indexA,indexB,indexC,indexD){var vertices=geometry.vertices;var a=vertices[indexA];var b=vertices[indexB];var c=vertices[indexC];var d=vertices[indexD];if(Math.abs(a.y-b.y)<.01){return[new THREE.Vector2(a.x,1-a.z),new THREE.Vector2(b.x,1-b.z),new THREE.Vector2(c.x,1-c.z),new THREE.Vector2(d.x,1-d.z)]}else{return[new THREE.Vector2(a.y,1-a.z),new THREE.Vector2(b.y,1-b.z),new THREE.Vector2(c.y,1-c.z),new THREE.Vector2(d.y,1-d.z)]}}};THREE.ShapeGeometry=function(shapes,options){THREE.Geometry.call(this);this.type="ShapeGeometry";if(Array.isArray(shapes)===false)shapes=[shapes];this.addShapeList(shapes,options);this.computeFaceNormals()};THREE.ShapeGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.ShapeGeometry.prototype.constructor=THREE.ShapeGeometry;THREE.ShapeGeometry.prototype.addShapeList=function(shapes,options){for(var i=0,l=shapes.length;i<l;i++){this.addShape(shapes[i],options)}return this};THREE.ShapeGeometry.prototype.addShape=function(shape,options){if(options===undefined)options={};var curveSegments=options.curveSegments!==undefined?options.curveSegments:12;var material=options.material;var uvgen=options.UVGenerator===undefined?THREE.ExtrudeGeometry.WorldUVGenerator:options.UVGenerator;var i,l,hole;var shapesOffset=this.vertices.length;var shapePoints=shape.extractPoints(curveSegments);var vertices=shapePoints.shape;var holes=shapePoints.holes;var reverse=!THREE.ShapeUtils.isClockWise(vertices);if(reverse){vertices=vertices.reverse();for(i=0,l=holes.length;i<l;i++){hole=holes[i];if(THREE.ShapeUtils.isClockWise(hole)){holes[i]=hole.reverse()}}reverse=false}var faces=THREE.ShapeUtils.triangulateShape(vertices,holes);for(i=0,l=holes.length;i<l;i++){hole=holes[i];vertices=vertices.concat(hole)}var vert,vlen=vertices.length;var face,flen=faces.length;for(i=0;i<vlen;i++){vert=vertices[i];this.vertices.push(new THREE.Vector3(vert.x,vert.y,0))}for(i=0;i<flen;i++){face=faces[i];var a=face[0]+shapesOffset;var b=face[1]+shapesOffset;var c=face[2]+shapesOffset;this.faces.push(new THREE.Face3(a,b,c,null,null,material));this.faceVertexUvs[0].push(uvgen.generateTopUV(this,a,b,c))}};THREE.LatheGeometry=function(points,segments,phiStart,phiLength){THREE.Geometry.call(this);this.type="LatheGeometry";this.parameters={points:points,segments:segments,phiStart:phiStart,phiLength:phiLength};segments=segments||12;phiStart=phiStart||0;phiLength=phiLength||2*Math.PI;var inversePointLength=1/(points.length-1);var inverseSegments=1/segments;for(var i=0,il=segments;i<=il;i++){var phi=phiStart+i*inverseSegments*phiLength;var c=Math.cos(phi),s=Math.sin(phi);for(var j=0,jl=points.length;j<jl;j++){var pt=points[j];var vertex=new THREE.Vector3;vertex.x=c*pt.x-s*pt.y;vertex.y=s*pt.x+c*pt.y;vertex.z=pt.z;this.vertices.push(vertex)}}var np=points.length;for(var i=0,il=segments;i<il;i++){for(var j=0,jl=points.length-1;j<jl;j++){var base=j+np*i;var a=base;var b=base+np;var c=base+1+np;var d=base+1;var u0=i*inverseSegments;var v0=j*inversePointLength;var u1=u0+inverseSegments;var v1=v0+inversePointLength;this.faces.push(new THREE.Face3(a,b,d));this.faceVertexUvs[0].push([new THREE.Vector2(u0,v0),new THREE.Vector2(u1,v0),new THREE.Vector2(u0,v1)]);this.faces.push(new THREE.Face3(b,c,d));this.faceVertexUvs[0].push([new THREE.Vector2(u1,v0),new THREE.Vector2(u1,v1),new THREE.Vector2(u0,v1)])}}this.mergeVertices();this.computeFaceNormals();this.computeVertexNormals()};THREE.LatheGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.LatheGeometry.prototype.constructor=THREE.LatheGeometry;THREE.PlaneGeometry=function(width,height,widthSegments,heightSegments){THREE.Geometry.call(this);this.type="PlaneGeometry";this.parameters={width:width,height:height,widthSegments:widthSegments,heightSegments:heightSegments};this.fromBufferGeometry(new THREE.PlaneBufferGeometry(width,height,widthSegments,heightSegments))};THREE.PlaneGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.PlaneGeometry.prototype.constructor=THREE.PlaneGeometry;THREE.PlaneGeometry.prototype.clone=function(){var parameters=this.parameters;return new THREE.PlaneGeometry(parameters.width,parameters.height,parameters.widthSegments,parameters.heightSegments)};THREE.PlaneBufferGeometry=function(width,height,widthSegments,heightSegments){THREE.BufferGeometry.call(this);this.type="PlaneBufferGeometry";this.parameters={width:width,height:height,widthSegments:widthSegments,heightSegments:heightSegments};var width_half=width/2;var height_half=height/2;var gridX=Math.floor(widthSegments)||1;var gridY=Math.floor(heightSegments)||1;var gridX1=gridX+1;var gridY1=gridY+1;var segment_width=width/gridX;var segment_height=height/gridY;var vertices=new Float32Array(gridX1*gridY1*3);var normals=new Float32Array(gridX1*gridY1*3);var uvs=new Float32Array(gridX1*gridY1*2);var offset=0;var offset2=0;for(var iy=0;iy<gridY1;iy++){var y=iy*segment_height-height_half;for(var ix=0;ix<gridX1;ix++){var x=ix*segment_width-width_half;vertices[offset]=x;vertices[offset+1]=-y;normals[offset+2]=1;uvs[offset2]=ix/gridX;uvs[offset2+1]=1-iy/gridY;offset+=3;offset2+=2}}offset=0;var indices=new(vertices.length/3>65535?Uint32Array:Uint16Array)(gridX*gridY*6);for(var iy=0;iy<gridY;iy++){for(var ix=0;ix<gridX;ix++){var a=ix+gridX1*iy;var b=ix+gridX1*(iy+1);var c=ix+1+gridX1*(iy+1);var d=ix+1+gridX1*iy;indices[offset]=a;indices[offset+1]=b;indices[offset+2]=d;indices[offset+3]=b;indices[offset+4]=c;indices[offset+5]=d;offset+=6}}this.setIndex(new THREE.BufferAttribute(indices,1));this.addAttribute("position",new THREE.BufferAttribute(vertices,3));this.addAttribute("normal",new THREE.BufferAttribute(normals,3));this.addAttribute("uv",new THREE.BufferAttribute(uvs,2))};THREE.PlaneBufferGeometry.prototype=Object.create(THREE.BufferGeometry.prototype);THREE.PlaneBufferGeometry.prototype.constructor=THREE.PlaneBufferGeometry;THREE.PlaneBufferGeometry.prototype.clone=function(){var parameters=this.parameters;return new THREE.PlaneBufferGeometry(parameters.width,parameters.height,parameters.widthSegments,parameters.heightSegments)};THREE.RingGeometry=function(innerRadius,outerRadius,thetaSegments,phiSegments,thetaStart,thetaLength){THREE.Geometry.call(this);this.type="RingGeometry";this.parameters={innerRadius:innerRadius,outerRadius:outerRadius,thetaSegments:thetaSegments,phiSegments:phiSegments,thetaStart:thetaStart,thetaLength:thetaLength};innerRadius=innerRadius||0;outerRadius=outerRadius||50;thetaStart=thetaStart!==undefined?thetaStart:0;thetaLength=thetaLength!==undefined?thetaLength:Math.PI*2;thetaSegments=thetaSegments!==undefined?Math.max(3,thetaSegments):8;phiSegments=phiSegments!==undefined?Math.max(1,phiSegments):8;var i,o,uvs=[],radius=innerRadius,radiusStep=(outerRadius-innerRadius)/phiSegments;for(i=0;i<phiSegments+1;i++){for(o=0;o<thetaSegments+1;o++){var vertex=new THREE.Vector3;var segment=thetaStart+o/thetaSegments*thetaLength;vertex.x=radius*Math.cos(segment);vertex.y=radius*Math.sin(segment);this.vertices.push(vertex);uvs.push(new THREE.Vector2((vertex.x/outerRadius+1)/2,(vertex.y/outerRadius+1)/2))}radius+=radiusStep}var n=new THREE.Vector3(0,0,1);for(i=0;i<phiSegments;i++){var thetaSegment=i*(thetaSegments+1);for(o=0;o<thetaSegments;o++){var segment=o+thetaSegment;var v1=segment;var v2=segment+thetaSegments+1;var v3=segment+thetaSegments+2;this.faces.push(new THREE.Face3(v1,v2,v3,[n.clone(),n.clone(),n.clone()]));this.faceVertexUvs[0].push([uvs[v1].clone(),uvs[v2].clone(),uvs[v3].clone()]);v1=segment;v2=segment+thetaSegments+2;v3=segment+1;this.faces.push(new THREE.Face3(v1,v2,v3,[n.clone(),n.clone(),n.clone()]));this.faceVertexUvs[0].push([uvs[v1].clone(),uvs[v2].clone(),uvs[v3].clone()])}}this.computeFaceNormals();this.boundingSphere=new THREE.Sphere(new THREE.Vector3,radius)};THREE.RingGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.RingGeometry.prototype.constructor=THREE.RingGeometry;THREE.RingGeometry.prototype.clone=function(){var parameters=this.parameters;return new THREE.RingGeometry(parameters.innerRadius,parameters.outerRadius,parameters.thetaSegments,parameters.phiSegments,parameters.thetaStart,parameters.thetaLength)};THREE.SphereGeometry=function(radius,widthSegments,heightSegments,phiStart,phiLength,thetaStart,thetaLength){THREE.Geometry.call(this);this.type="SphereGeometry";this.parameters={radius:radius,widthSegments:widthSegments,heightSegments:heightSegments,phiStart:phiStart,phiLength:phiLength,thetaStart:thetaStart,thetaLength:thetaLength};this.fromBufferGeometry(new THREE.SphereBufferGeometry(radius,widthSegments,heightSegments,phiStart,phiLength,thetaStart,thetaLength))};THREE.SphereGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.SphereGeometry.prototype.constructor=THREE.SphereGeometry;THREE.SphereGeometry.prototype.clone=function(){var parameters=this.parameters;return new THREE.SphereGeometry(parameters.radius,parameters.widthSegments,parameters.heightSegments,parameters.phiStart,parameters.phiLength,parameters.thetaStart,parameters.thetaLength)};THREE.SphereBufferGeometry=function(radius,widthSegments,heightSegments,phiStart,phiLength,thetaStart,thetaLength){THREE.BufferGeometry.call(this);this.type="SphereBufferGeometry";this.parameters={radius:radius,widthSegments:widthSegments,heightSegments:heightSegments,phiStart:phiStart,phiLength:phiLength,thetaStart:thetaStart,thetaLength:thetaLength};radius=radius||50;widthSegments=Math.max(3,Math.floor(widthSegments)||8);heightSegments=Math.max(2,Math.floor(heightSegments)||6);phiStart=phiStart!==undefined?phiStart:0;phiLength=phiLength!==undefined?phiLength:Math.PI*2;thetaStart=thetaStart!==undefined?thetaStart:0;thetaLength=thetaLength!==undefined?thetaLength:Math.PI;var thetaEnd=thetaStart+thetaLength;var vertexCount=(widthSegments+1)*(heightSegments+1);var positions=new THREE.BufferAttribute(new Float32Array(vertexCount*3),3);var normals=new THREE.BufferAttribute(new Float32Array(vertexCount*3),3);var uvs=new THREE.BufferAttribute(new Float32Array(vertexCount*2),2);var index=0,vertices=[],normal=new THREE.Vector3;for(var y=0;y<=heightSegments;y++){var verticesRow=[];var v=y/heightSegments;for(var x=0;x<=widthSegments;x++){var u=x/widthSegments;var px=-radius*Math.cos(phiStart+u*phiLength)*Math.sin(thetaStart+v*thetaLength);var py=radius*Math.cos(thetaStart+v*thetaLength);var pz=radius*Math.sin(phiStart+u*phiLength)*Math.sin(thetaStart+v*thetaLength);normal.set(px,py,pz).normalize();positions.setXYZ(index,px,py,pz);normals.setXYZ(index,normal.x,normal.y,normal.z);uvs.setXY(index,u,1-v);verticesRow.push(index);index++}vertices.push(verticesRow)}var indices=[];for(var y=0;y<heightSegments;y++){for(var x=0;x<widthSegments;x++){var v1=vertices[y][x+1];var v2=vertices[y][x];var v3=vertices[y+1][x];var v4=vertices[y+1][x+1];if(y!==0||thetaStart>0)indices.push(v1,v2,v4);if(y!==heightSegments-1||thetaEnd<Math.PI)indices.push(v2,v3,v4)}}this.setIndex(new(positions.count>65535?THREE.Uint32Attribute:THREE.Uint16Attribute)(indices,1));this.addAttribute("position",positions);this.addAttribute("normal",normals);this.addAttribute("uv",uvs);this.boundingSphere=new THREE.Sphere(new THREE.Vector3,radius)};THREE.SphereBufferGeometry.prototype=Object.create(THREE.BufferGeometry.prototype);THREE.SphereBufferGeometry.prototype.constructor=THREE.SphereBufferGeometry;THREE.SphereBufferGeometry.prototype.clone=function(){var parameters=this.parameters;return new THREE.SphereBufferGeometry(parameters.radius,parameters.widthSegments,parameters.heightSegments,parameters.phiStart,parameters.phiLength,parameters.thetaStart,parameters.thetaLength)};THREE.TorusGeometry=function(radius,tube,radialSegments,tubularSegments,arc){THREE.Geometry.call(this);this.type="TorusGeometry";this.parameters={radius:radius,tube:tube,radialSegments:radialSegments,tubularSegments:tubularSegments,arc:arc};radius=radius||100;tube=tube||40;radialSegments=radialSegments||8;tubularSegments=tubularSegments||6;arc=arc||Math.PI*2;var center=new THREE.Vector3,uvs=[],normals=[];for(var j=0;j<=radialSegments;j++){for(var i=0;i<=tubularSegments;i++){var u=i/tubularSegments*arc;var v=j/radialSegments*Math.PI*2;center.x=radius*Math.cos(u);center.y=radius*Math.sin(u);var vertex=new THREE.Vector3;vertex.x=(radius+tube*Math.cos(v))*Math.cos(u);vertex.y=(radius+tube*Math.cos(v))*Math.sin(u);vertex.z=tube*Math.sin(v);this.vertices.push(vertex);uvs.push(new THREE.Vector2(i/tubularSegments,j/radialSegments));normals.push(vertex.clone().sub(center).normalize())}}for(var j=1;j<=radialSegments;j++){for(var i=1;i<=tubularSegments;i++){var a=(tubularSegments+1)*j+i-1;var b=(tubularSegments+1)*(j-1)+i-1;var c=(tubularSegments+1)*(j-1)+i;var d=(tubularSegments+1)*j+i;var face=new THREE.Face3(a,b,d,[normals[a].clone(),normals[b].clone(),normals[d].clone()]);this.faces.push(face);this.faceVertexUvs[0].push([uvs[a].clone(),uvs[b].clone(),uvs[d].clone()]);face=new THREE.Face3(b,c,d,[normals[b].clone(),normals[c].clone(),normals[d].clone()]);this.faces.push(face);this.faceVertexUvs[0].push([uvs[b].clone(),uvs[c].clone(),uvs[d].clone()])}}this.computeFaceNormals()};THREE.TorusGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.TorusGeometry.prototype.constructor=THREE.TorusGeometry;THREE.TorusGeometry.prototype.clone=function(){var parameters=this.parameters;return new THREE.TorusGeometry(parameters.radius,parameters.tube,parameters.radialSegments,parameters.tubularSegments,parameters.arc)};THREE.TorusKnotGeometry=function(radius,tube,radialSegments,tubularSegments,p,q,heightScale){THREE.Geometry.call(this);this.type="TorusKnotGeometry";this.parameters={radius:radius,tube:tube,radialSegments:radialSegments,tubularSegments:tubularSegments,p:p,q:q,heightScale:heightScale};radius=radius||100;tube=tube||40;radialSegments=radialSegments||64;tubularSegments=tubularSegments||8;p=p||2;q=q||3;heightScale=heightScale||1;var grid=new Array(radialSegments);var tang=new THREE.Vector3;var n=new THREE.Vector3;var bitan=new THREE.Vector3;for(var i=0;i<radialSegments;++i){grid[i]=new Array(tubularSegments);var u=i/radialSegments*2*p*Math.PI;var p1=getPos(u,q,p,radius,heightScale);var p2=getPos(u+.01,q,p,radius,heightScale);tang.subVectors(p2,p1);n.addVectors(p2,p1);bitan.crossVectors(tang,n);n.crossVectors(bitan,tang);bitan.normalize();n.normalize();for(var j=0;j<tubularSegments;++j){var v=j/tubularSegments*2*Math.PI;var cx=-tube*Math.cos(v);var cy=tube*Math.sin(v);var pos=new THREE.Vector3;pos.x=p1.x+cx*n.x+cy*bitan.x;pos.y=p1.y+cx*n.y+cy*bitan.y;pos.z=p1.z+cx*n.z+cy*bitan.z;grid[i][j]=this.vertices.push(pos)-1}}for(var i=0;i<radialSegments;++i){for(var j=0;j<tubularSegments;++j){var ip=(i+1)%radialSegments;var jp=(j+1)%tubularSegments;var a=grid[i][j];var b=grid[ip][j];var c=grid[ip][jp];var d=grid[i][jp];var uva=new THREE.Vector2(i/radialSegments,j/tubularSegments);var uvb=new THREE.Vector2((i+1)/radialSegments,j/tubularSegments);var uvc=new THREE.Vector2((i+1)/radialSegments,(j+1)/tubularSegments);var uvd=new THREE.Vector2(i/radialSegments,(j+1)/tubularSegments);this.faces.push(new THREE.Face3(a,b,d));this.faceVertexUvs[0].push([uva,uvb,uvd]);this.faces.push(new THREE.Face3(b,c,d));this.faceVertexUvs[0].push([uvb.clone(),uvc,uvd.clone()])}}this.computeFaceNormals();this.computeVertexNormals();function getPos(u,in_q,in_p,radius,heightScale){var cu=Math.cos(u);var su=Math.sin(u);var quOverP=in_q/in_p*u;var cs=Math.cos(quOverP);var tx=radius*(2+cs)*.5*cu;var ty=radius*(2+cs)*su*.5;var tz=heightScale*radius*Math.sin(quOverP)*.5;return new THREE.Vector3(tx,ty,tz)}};THREE.TorusKnotGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.TorusKnotGeometry.prototype.constructor=THREE.TorusKnotGeometry;THREE.TorusKnotGeometry.prototype.clone=function(){var parameters=this.parameters;return new THREE.TorusKnotGeometry(parameters.radius,parameters.tube,parameters.radialSegments,parameters.tubularSegments,parameters.p,parameters.q,parameters.heightScale)};THREE.TubeGeometry=function(path,segments,radius,radialSegments,closed,taper){THREE.Geometry.call(this);this.type="TubeGeometry";this.parameters={path:path,segments:segments,radius:radius,radialSegments:radialSegments,closed:closed,taper:taper};segments=segments||64;radius=radius||1;radialSegments=radialSegments||8;closed=closed||false;taper=taper||THREE.TubeGeometry.NoTaper;var grid=[];var scope=this,tangent,normal,binormal,numpoints=segments+1,u,v,r,cx,cy,pos,pos2=new THREE.Vector3,i,j,ip,jp,a,b,c,d,uva,uvb,uvc,uvd;var frames=new THREE.TubeGeometry.FrenetFrames(path,segments,closed),tangents=frames.tangents,normals=frames.normals,binormals=frames.binormals;this.tangents=tangents;this.normals=normals;this.binormals=binormals;function vert(x,y,z){return scope.vertices.push(new THREE.Vector3(x,y,z))-1}for(i=0;i<numpoints;i++){grid[i]=[];u=i/(numpoints-1);pos=path.getPointAt(u);tangent=tangents[i];normal=normals[i];binormal=binormals[i];r=radius*taper(u);for(j=0;j<radialSegments;j++){v=j/radialSegments*2*Math.PI;cx=-r*Math.cos(v);cy=r*Math.sin(v);pos2.copy(pos);pos2.x+=cx*normal.x+cy*binormal.x;pos2.y+=cx*normal.y+cy*binormal.y;pos2.z+=cx*normal.z+cy*binormal.z;grid[i][j]=vert(pos2.x,pos2.y,pos2.z)}}for(i=0;i<segments;i++){for(j=0;j<radialSegments;j++){ip=closed?(i+1)%segments:i+1;jp=(j+1)%radialSegments;a=grid[i][j];b=grid[ip][j];c=grid[ip][jp];d=grid[i][jp];uva=new THREE.Vector2(i/segments,j/radialSegments);uvb=new THREE.Vector2((i+1)/segments,j/radialSegments);uvc=new THREE.Vector2((i+1)/segments,(j+1)/radialSegments);uvd=new THREE.Vector2(i/segments,(j+1)/radialSegments);this.faces.push(new THREE.Face3(a,b,d));this.faceVertexUvs[0].push([uva,uvb,uvd]);this.faces.push(new THREE.Face3(b,c,d));this.faceVertexUvs[0].push([uvb.clone(),uvc,uvd.clone()])}}this.computeFaceNormals();this.computeVertexNormals()};THREE.TubeGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.TubeGeometry.prototype.constructor=THREE.TubeGeometry;THREE.TubeGeometry.prototype.clone=function(){return new this.constructor(this.parameters.path,this.parameters.segments,this.parameters.radius,this.parameters.radialSegments,this.parameters.closed,this.parameters.taper)};THREE.TubeGeometry.NoTaper=function(u){return 1};THREE.TubeGeometry.SinusoidalTaper=function(u){return Math.sin(Math.PI*u)};THREE.TubeGeometry.FrenetFrames=function(path,segments,closed){var normal=new THREE.Vector3,tangents=[],normals=[],binormals=[],vec=new THREE.Vector3,mat=new THREE.Matrix4,numpoints=segments+1,theta,smallest,tx,ty,tz,i,u;this.tangents=tangents;this.normals=normals;this.binormals=binormals;for(i=0;i<numpoints;i++){u=i/(numpoints-1);tangents[i]=path.getTangentAt(u);tangents[i].normalize()}initialNormal3();function initialNormal3(){normals[0]=new THREE.Vector3;binormals[0]=new THREE.Vector3;smallest=Number.MAX_VALUE;tx=Math.abs(tangents[0].x);ty=Math.abs(tangents[0].y);tz=Math.abs(tangents[0].z);if(tx<=smallest){smallest=tx;normal.set(1,0,0)}if(ty<=smallest){smallest=ty;normal.set(0,1,0)}if(tz<=smallest){normal.set(0,0,1)}vec.crossVectors(tangents[0],normal).normalize();normals[0].crossVectors(tangents[0],vec);binormals[0].crossVectors(tangents[0],normals[0])}for(i=1;i<numpoints;i++){normals[i]=normals[i-1].clone();binormals[i]=binormals[i-1].clone();vec.crossVectors(tangents[i-1],tangents[i]);if(vec.length()>Number.EPSILON){vec.normalize();theta=Math.acos(THREE.Math.clamp(tangents[i-1].dot(tangents[i]),-1,1));normals[i].applyMatrix4(mat.makeRotationAxis(vec,theta))}binormals[i].crossVectors(tangents[i],normals[i])}if(closed){theta=Math.acos(THREE.Math.clamp(normals[0].dot(normals[numpoints-1]),-1,1));theta/=numpoints-1;if(tangents[0].dot(vec.crossVectors(normals[0],normals[numpoints-1]))>0){theta=-theta}for(i=1;i<numpoints;i++){normals[i].applyMatrix4(mat.makeRotationAxis(tangents[i],theta*i));binormals[i].crossVectors(tangents[i],normals[i])}}};THREE.PolyhedronGeometry=function(vertices,indices,radius,detail){THREE.Geometry.call(this);this.type="PolyhedronGeometry";this.parameters={vertices:vertices,indices:indices,radius:radius,detail:detail};radius=radius||1;detail=detail||0;var that=this;for(var i=0,l=vertices.length;i<l;i+=3){prepare(new THREE.Vector3(vertices[i],vertices[i+1],vertices[i+2]))}var p=this.vertices;var faces=[];for(var i=0,j=0,l=indices.length;i<l;i+=3,j++){var v1=p[indices[i]];var v2=p[indices[i+1]];var v3=p[indices[i+2]];faces[j]=new THREE.Face3(v1.index,v2.index,v3.index,[v1.clone(),v2.clone(),v3.clone()],undefined,j)}var centroid=new THREE.Vector3;for(var i=0,l=faces.length;i<l;i++){subdivide(faces[i],detail)}for(var i=0,l=this.faceVertexUvs[0].length;i<l;i++){var uvs=this.faceVertexUvs[0][i];var x0=uvs[0].x;var x1=uvs[1].x;var x2=uvs[2].x;var max=Math.max(x0,x1,x2);var min=Math.min(x0,x1,x2);if(max>.9&&min<.1){if(x0<.2)uvs[0].x+=1;if(x1<.2)uvs[1].x+=1;if(x2<.2)uvs[2].x+=1}}for(var i=0,l=this.vertices.length;i<l;i++){this.vertices[i].multiplyScalar(radius)}this.mergeVertices();this.computeFaceNormals();this.boundingSphere=new THREE.Sphere(new THREE.Vector3,radius);function prepare(vector){var vertex=vector.normalize().clone();vertex.index=that.vertices.push(vertex)-1;var u=azimuth(vector)/2/Math.PI+.5;var v=inclination(vector)/Math.PI+.5;vertex.uv=new THREE.Vector2(u,1-v);return vertex}function make(v1,v2,v3,materialIndex){var face=new THREE.Face3(v1.index,v2.index,v3.index,[v1.clone(),v2.clone(),v3.clone()],undefined,materialIndex);that.faces.push(face);centroid.copy(v1).add(v2).add(v3).divideScalar(3);var azi=azimuth(centroid);that.faceVertexUvs[0].push([correctUV(v1.uv,v1,azi),correctUV(v2.uv,v2,azi),correctUV(v3.uv,v3,azi)])}function subdivide(face,detail){var cols=Math.pow(2,detail);var a=prepare(that.vertices[face.a]);var b=prepare(that.vertices[face.b]);var c=prepare(that.vertices[face.c]);var v=[];var materialIndex=face.materialIndex;for(var i=0;i<=cols;i++){v[i]=[];var aj=prepare(a.clone().lerp(c,i/cols));var bj=prepare(b.clone().lerp(c,i/cols));var rows=cols-i;for(var j=0;j<=rows;j++){if(j===0&&i===cols){v[i][j]=aj}else{v[i][j]=prepare(aj.clone().lerp(bj,j/rows))}}}for(var i=0;i<cols;i++){for(var j=0;j<2*(cols-i)-1;j++){var k=Math.floor(j/2);if(j%2===0){make(v[i][k+1],v[i+1][k],v[i][k],materialIndex)}else{make(v[i][k+1],v[i+1][k+1],v[i+1][k],materialIndex)}}}}function azimuth(vector){return Math.atan2(vector.z,-vector.x)}function inclination(vector){return Math.atan2(-vector.y,Math.sqrt(vector.x*vector.x+vector.z*vector.z))}function correctUV(uv,vector,azimuth){if(azimuth<0&&uv.x===1)uv=new THREE.Vector2(uv.x-1,uv.y);if(vector.x===0&&vector.z===0)uv=new THREE.Vector2(azimuth/2/Math.PI+.5,uv.y);return uv.clone()}};THREE.PolyhedronGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.PolyhedronGeometry.prototype.constructor=THREE.PolyhedronGeometry;THREE.PolyhedronGeometry.prototype.clone=function(){var parameters=this.parameters;return new THREE.PolyhedronGeometry(parameters.vertices,parameters.indices,parameters.radius,parameters.detail)};THREE.DodecahedronGeometry=function(radius,detail){var t=(1+Math.sqrt(5))/2;var r=1/t;var vertices=[-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-r,-t,0,-r,t,0,r,-t,0,r,t,-r,-t,0,-r,t,0,r,-t,0,r,t,0,-t,0,-r,t,0,-r,-t,0,r,t,0,r];var indices=[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9];THREE.PolyhedronGeometry.call(this,vertices,indices,radius,detail);this.type="DodecahedronGeometry";this.parameters={radius:radius,detail:detail}};THREE.DodecahedronGeometry.prototype=Object.create(THREE.PolyhedronGeometry.prototype);THREE.DodecahedronGeometry.prototype.constructor=THREE.DodecahedronGeometry;THREE.DodecahedronGeometry.prototype.clone=function(){var parameters=this.parameters;return new THREE.DodecahedronGeometry(parameters.radius,parameters.detail)};THREE.IcosahedronGeometry=function(radius,detail){var t=(1+Math.sqrt(5))/2;var vertices=[-1,t,0,1,t,0,-1,-t,0,1,-t,0,0,-1,t,0,1,t,0,-1,-t,0,1,-t,t,0,-1,t,0,1,-t,0,-1,-t,0,1];var indices=[0,11,5,0,5,1,0,1,7,0,7,10,0,10,11,1,5,9,5,11,4,11,10,2,10,7,6,7,1,8,3,9,4,3,4,2,3,2,6,3,6,8,3,8,9,4,9,5,2,4,11,6,2,10,8,6,7,9,8,1];THREE.PolyhedronGeometry.call(this,vertices,indices,radius,detail);this.type="IcosahedronGeometry";this.parameters={radius:radius,detail:detail}};THREE.IcosahedronGeometry.prototype=Object.create(THREE.PolyhedronGeometry.prototype);THREE.IcosahedronGeometry.prototype.constructor=THREE.IcosahedronGeometry;THREE.IcosahedronGeometry.prototype.clone=function(){var parameters=this.parameters;return new THREE.IcosahedronGeometry(parameters.radius,parameters.detail)};THREE.OctahedronGeometry=function(radius,detail){var vertices=[1,0,0,-1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1];var indices=[0,2,4,0,4,3,0,3,5,0,5,2,1,2,5,1,5,3,1,3,4,1,4,2];THREE.PolyhedronGeometry.call(this,vertices,indices,radius,detail);this.type="OctahedronGeometry";this.parameters={radius:radius,detail:detail}};THREE.OctahedronGeometry.prototype=Object.create(THREE.PolyhedronGeometry.prototype);THREE.OctahedronGeometry.prototype.constructor=THREE.OctahedronGeometry;THREE.OctahedronGeometry.prototype.clone=function(){var parameters=this.parameters;return new THREE.OctahedronGeometry(parameters.radius,parameters.detail)};THREE.TetrahedronGeometry=function(radius,detail){var vertices=[1,1,1,-1,-1,1,-1,1,-1,1,-1,-1];var indices=[2,1,0,0,3,2,1,3,0,2,3,1];THREE.PolyhedronGeometry.call(this,vertices,indices,radius,detail);this.type="TetrahedronGeometry";this.parameters={radius:radius,detail:detail}};THREE.TetrahedronGeometry.prototype=Object.create(THREE.PolyhedronGeometry.prototype);THREE.TetrahedronGeometry.prototype.constructor=THREE.TetrahedronGeometry;THREE.TetrahedronGeometry.prototype.clone=function(){var parameters=this.parameters;return new THREE.TetrahedronGeometry(parameters.radius,parameters.detail)};THREE.ParametricGeometry=function(func,slices,stacks){THREE.Geometry.call(this);this.type="ParametricGeometry";this.parameters={func:func,slices:slices,stacks:stacks};var verts=this.vertices;var faces=this.faces;var uvs=this.faceVertexUvs[0];var i,j,p;var u,v;var sliceCount=slices+1;for(i=0;i<=stacks;i++){v=i/stacks;for(j=0;j<=slices;j++){u=j/slices;p=func(u,v);verts.push(p)}}var a,b,c,d;var uva,uvb,uvc,uvd;for(i=0;i<stacks;i++){for(j=0;j<slices;j++){a=i*sliceCount+j;b=i*sliceCount+j+1;c=(i+1)*sliceCount+j+1;d=(i+1)*sliceCount+j;uva=new THREE.Vector2(j/slices,i/stacks);uvb=new THREE.Vector2((j+1)/slices,i/stacks);uvc=new THREE.Vector2((j+1)/slices,(i+1)/stacks);uvd=new THREE.Vector2(j/slices,(i+1)/stacks);faces.push(new THREE.Face3(a,b,d));uvs.push([uva,uvb,uvd]);faces.push(new THREE.Face3(b,c,d));uvs.push([uvb.clone(),uvc,uvd.clone()])}}this.computeFaceNormals();this.computeVertexNormals()};THREE.ParametricGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.ParametricGeometry.prototype.constructor=THREE.ParametricGeometry;THREE.WireframeGeometry=function(geometry){THREE.BufferGeometry.call(this);var edge=[0,0],hash={};function sortFunction(a,b){return a-b}var keys=["a","b","c"];if(geometry instanceof THREE.Geometry){var vertices=geometry.vertices;var faces=geometry.faces;var numEdges=0;var edges=new Uint32Array(6*faces.length);for(var i=0,l=faces.length;i<l;i++){var face=faces[i];for(var j=0;j<3;j++){edge[0]=face[keys[j]];edge[1]=face[keys[(j+1)%3]];edge.sort(sortFunction);var key=edge.toString();if(hash[key]===undefined){edges[2*numEdges]=edge[0];edges[2*numEdges+1]=edge[1];hash[key]=true;numEdges++}}}var coords=new Float32Array(numEdges*2*3);for(var i=0,l=numEdges;i<l;i++){for(var j=0;j<2;j++){var vertex=vertices[edges[2*i+j]];var index=6*i+3*j;coords[index+0]=vertex.x;coords[index+1]=vertex.y;coords[index+2]=vertex.z}}this.addAttribute("position",new THREE.BufferAttribute(coords,3))}else if(geometry instanceof THREE.BufferGeometry){if(geometry.index!==null){var indices=geometry.index.array;var vertices=geometry.attributes.position;var drawcalls=geometry.drawcalls;var numEdges=0;if(drawcalls.length===0){geometry.addGroup(0,indices.length)}var edges=new Uint32Array(2*indices.length);for(var o=0,ol=drawcalls.length;o<ol;++o){var drawcall=drawcalls[o];var start=drawcall.start;var count=drawcall.count;for(var i=start,il=start+count;i<il;i+=3){for(var j=0;j<3;j++){edge[0]=indices[i+j];edge[1]=indices[i+(j+1)%3];edge.sort(sortFunction);var key=edge.toString();if(hash[key]===undefined){edges[2*numEdges]=edge[0];edges[2*numEdges+1]=edge[1];hash[key]=true;numEdges++}}}}var coords=new Float32Array(numEdges*2*3);for(var i=0,l=numEdges;i<l;i++){for(var j=0;j<2;j++){var index=6*i+3*j;var index2=edges[2*i+j];coords[index+0]=vertices.getX(index2);coords[index+1]=vertices.getY(index2);coords[index+2]=vertices.getZ(index2)}}this.addAttribute("position",new THREE.BufferAttribute(coords,3))}else{
            var vertices=geometry.attributes.position.array;var numEdges=vertices.length/3;var numTris=numEdges/3;var coords=new Float32Array(numEdges*2*3);for(var i=0,l=numTris;i<l;i++){for(var j=0;j<3;j++){var index=18*i+6*j;var index1=9*i+3*j;coords[index+0]=vertices[index1];coords[index+1]=vertices[index1+1];coords[index+2]=vertices[index1+2];var index2=9*i+3*((j+1)%3);coords[index+3]=vertices[index2];coords[index+4]=vertices[index2+1];coords[index+5]=vertices[index2+2]}}this.addAttribute("position",new THREE.BufferAttribute(coords,3))}}};THREE.WireframeGeometry.prototype=Object.create(THREE.BufferGeometry.prototype);THREE.WireframeGeometry.prototype.constructor=THREE.WireframeGeometry;THREE.AxisHelper=function(size){size=size||1;var vertices=new Float32Array([0,0,0,size,0,0,0,0,0,0,size,0,0,0,0,0,0,size]);var colors=new Float32Array([1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1]);var geometry=new THREE.BufferGeometry;geometry.addAttribute("position",new THREE.BufferAttribute(vertices,3));geometry.addAttribute("color",new THREE.BufferAttribute(colors,3));var material=new THREE.LineBasicMaterial({vertexColors:THREE.VertexColors});THREE.LineSegments.call(this,geometry,material)};THREE.AxisHelper.prototype=Object.create(THREE.LineSegments.prototype);THREE.AxisHelper.prototype.constructor=THREE.AxisHelper;THREE.ArrowHelper=function(){var lineGeometry=new THREE.Geometry;lineGeometry.vertices.push(new THREE.Vector3(0,0,0),new THREE.Vector3(0,1,0));var coneGeometry=new THREE.CylinderGeometry(0,.5,1,5,1);coneGeometry.translate(0,-.5,0);return function ArrowHelper(dir,origin,length,color,headLength,headWidth){THREE.Object3D.call(this);if(color===undefined)color=16776960;if(length===undefined)length=1;if(headLength===undefined)headLength=.2*length;if(headWidth===undefined)headWidth=.2*headLength;this.position.copy(origin);if(headLength<length){this.line=new THREE.Line(lineGeometry,new THREE.LineBasicMaterial({color:color}));this.line.matrixAutoUpdate=false;this.add(this.line)}this.cone=new THREE.Mesh(coneGeometry,new THREE.MeshBasicMaterial({color:color}));this.cone.matrixAutoUpdate=false;this.add(this.cone);this.setDirection(dir);this.setLength(length,headLength,headWidth)}}();THREE.ArrowHelper.prototype=Object.create(THREE.Object3D.prototype);THREE.ArrowHelper.prototype.constructor=THREE.ArrowHelper;THREE.ArrowHelper.prototype.setDirection=function(){var axis=new THREE.Vector3;var radians;return function setDirection(dir){if(dir.y>.99999){this.quaternion.set(0,0,0,1)}else if(dir.y<-.99999){this.quaternion.set(1,0,0,0)}else{axis.set(dir.z,0,-dir.x).normalize();radians=Math.acos(dir.y);this.quaternion.setFromAxisAngle(axis,radians)}}}();THREE.ArrowHelper.prototype.setLength=function(length,headLength,headWidth){if(headLength===undefined)headLength=.2*length;if(headWidth===undefined)headWidth=.2*headLength;if(headLength<length){this.line.scale.set(1,length-headLength,1);this.line.updateMatrix()}this.cone.scale.set(headWidth,headLength,headWidth);this.cone.position.y=length;this.cone.updateMatrix()};THREE.ArrowHelper.prototype.setColor=function(color){if(this.line!==undefined)this.line.material.color.set(color);this.cone.material.color.set(color)};THREE.BoxHelper=function(object){var indices=new Uint16Array([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,1,5,2,6,3,7]);var positions=new Float32Array(8*3);var geometry=new THREE.BufferGeometry;geometry.setIndex(new THREE.BufferAttribute(indices,1));geometry.addAttribute("position",new THREE.BufferAttribute(positions,3));THREE.LineSegments.call(this,geometry,new THREE.LineBasicMaterial({color:16776960}));if(object!==undefined){this.update(object)}};THREE.BoxHelper.prototype=Object.create(THREE.LineSegments.prototype);THREE.BoxHelper.prototype.constructor=THREE.BoxHelper;THREE.BoxHelper.prototype.update=function(){var box=new THREE.Box3;return function(object){box.setFromObject(object);if(box.empty())return;var min=box.min;var max=box.max;var position=this.geometry.attributes.position;var array=position.array;array[0]=max.x;array[1]=max.y;array[2]=max.z;array[3]=min.x;array[4]=max.y;array[5]=max.z;array[6]=min.x;array[7]=min.y;array[8]=max.z;array[9]=max.x;array[10]=min.y;array[11]=max.z;array[12]=max.x;array[13]=max.y;array[14]=min.z;array[15]=min.x;array[16]=max.y;array[17]=min.z;array[18]=min.x;array[19]=min.y;array[20]=min.z;array[21]=max.x;array[22]=min.y;array[23]=min.z;position.needsUpdate=true;this.geometry.computeBoundingSphere()}}();THREE.BoundingBoxHelper=function(object,hex){var color=hex!==undefined?hex:8947848;this.object=object;this.box=new THREE.Box3;THREE.Mesh.call(this,new THREE.BoxGeometry(1,1,1),new THREE.MeshBasicMaterial({color:color,wireframe:true}))};THREE.BoundingBoxHelper.prototype=Object.create(THREE.Mesh.prototype);THREE.BoundingBoxHelper.prototype.constructor=THREE.BoundingBoxHelper;THREE.BoundingBoxHelper.prototype.update=function(){this.box.setFromObject(this.object);this.box.size(this.scale);this.box.center(this.position)};THREE.CameraHelper=function(camera){var geometry=new THREE.Geometry;var material=new THREE.LineBasicMaterial({color:16777215,vertexColors:THREE.FaceColors});var pointMap={};var hexFrustum=16755200;var hexCone=16711680;var hexUp=43775;var hexTarget=16777215;var hexCross=3355443;addLine("n1","n2",hexFrustum);addLine("n2","n4",hexFrustum);addLine("n4","n3",hexFrustum);addLine("n3","n1",hexFrustum);addLine("f1","f2",hexFrustum);addLine("f2","f4",hexFrustum);addLine("f4","f3",hexFrustum);addLine("f3","f1",hexFrustum);addLine("n1","f1",hexFrustum);addLine("n2","f2",hexFrustum);addLine("n3","f3",hexFrustum);addLine("n4","f4",hexFrustum);addLine("p","n1",hexCone);addLine("p","n2",hexCone);addLine("p","n3",hexCone);addLine("p","n4",hexCone);addLine("u1","u2",hexUp);addLine("u2","u3",hexUp);addLine("u3","u1",hexUp);addLine("c","t",hexTarget);addLine("p","c",hexCross);addLine("cn1","cn2",hexCross);addLine("cn3","cn4",hexCross);addLine("cf1","cf2",hexCross);addLine("cf3","cf4",hexCross);function addLine(a,b,hex){addPoint(a,hex);addPoint(b,hex)}function addPoint(id,hex){geometry.vertices.push(new THREE.Vector3);geometry.colors.push(new THREE.Color(hex));if(pointMap[id]===undefined){pointMap[id]=[]}pointMap[id].push(geometry.vertices.length-1)}THREE.LineSegments.call(this,geometry,material);this.camera=camera;this.camera.updateProjectionMatrix();this.matrix=camera.matrixWorld;this.matrixAutoUpdate=false;this.pointMap=pointMap;this.update()};THREE.CameraHelper.prototype=Object.create(THREE.LineSegments.prototype);THREE.CameraHelper.prototype.constructor=THREE.CameraHelper;THREE.CameraHelper.prototype.update=function(){var geometry,pointMap;var vector=new THREE.Vector3;var camera=new THREE.Camera;function setPoint(point,x,y,z){vector.set(x,y,z).unproject(camera);var points=pointMap[point];if(points!==undefined){for(var i=0,il=points.length;i<il;i++){geometry.vertices[points[i]].copy(vector)}}}return function(){geometry=this.geometry;pointMap=this.pointMap;var w=1,h=1;camera.projectionMatrix.copy(this.camera.projectionMatrix);setPoint("c",0,0,-1);setPoint("t",0,0,1);setPoint("n1",-w,-h,-1);setPoint("n2",w,-h,-1);setPoint("n3",-w,h,-1);setPoint("n4",w,h,-1);setPoint("f1",-w,-h,1);setPoint("f2",w,-h,1);setPoint("f3",-w,h,1);setPoint("f4",w,h,1);setPoint("u1",w*.7,h*1.1,-1);setPoint("u2",-w*.7,h*1.1,-1);setPoint("u3",0,h*2,-1);setPoint("cf1",-w,0,1);setPoint("cf2",w,0,1);setPoint("cf3",0,-h,1);setPoint("cf4",0,h,1);setPoint("cn1",-w,0,-1);setPoint("cn2",w,0,-1);setPoint("cn3",0,-h,-1);setPoint("cn4",0,h,-1);geometry.verticesNeedUpdate=true}}();THREE.DirectionalLightHelper=function(light,size){THREE.Object3D.call(this);this.light=light;this.light.updateMatrixWorld();this.matrix=light.matrixWorld;this.matrixAutoUpdate=false;size=size||1;var geometry=new THREE.Geometry;geometry.vertices.push(new THREE.Vector3(-size,size,0),new THREE.Vector3(size,size,0),new THREE.Vector3(size,-size,0),new THREE.Vector3(-size,-size,0),new THREE.Vector3(-size,size,0));var material=new THREE.LineBasicMaterial({fog:false});material.color.copy(this.light.color).multiplyScalar(this.light.intensity);this.lightPlane=new THREE.Line(geometry,material);this.add(this.lightPlane);geometry=new THREE.Geometry;geometry.vertices.push(new THREE.Vector3,new THREE.Vector3);material=new THREE.LineBasicMaterial({fog:false});material.color.copy(this.light.color).multiplyScalar(this.light.intensity);this.targetLine=new THREE.Line(geometry,material);this.add(this.targetLine);this.update()};THREE.DirectionalLightHelper.prototype=Object.create(THREE.Object3D.prototype);THREE.DirectionalLightHelper.prototype.constructor=THREE.DirectionalLightHelper;THREE.DirectionalLightHelper.prototype.dispose=function(){this.lightPlane.geometry.dispose();this.lightPlane.material.dispose();this.targetLine.geometry.dispose();this.targetLine.material.dispose()};THREE.DirectionalLightHelper.prototype.update=function(){var v1=new THREE.Vector3;var v2=new THREE.Vector3;var v3=new THREE.Vector3;return function(){v1.setFromMatrixPosition(this.light.matrixWorld);v2.setFromMatrixPosition(this.light.target.matrixWorld);v3.subVectors(v2,v1);this.lightPlane.lookAt(v3);this.lightPlane.material.color.copy(this.light.color).multiplyScalar(this.light.intensity);this.targetLine.geometry.vertices[1].copy(v3);this.targetLine.geometry.verticesNeedUpdate=true;this.targetLine.material.color.copy(this.lightPlane.material.color)}}();THREE.EdgesHelper=function(object,hex,thresholdAngle){var color=hex!==undefined?hex:16777215;THREE.LineSegments.call(this,new THREE.EdgesGeometry(object.geometry,thresholdAngle),new THREE.LineBasicMaterial({color:color}));this.matrix=object.matrixWorld;this.matrixAutoUpdate=false};THREE.EdgesHelper.prototype=Object.create(THREE.LineSegments.prototype);THREE.EdgesHelper.prototype.constructor=THREE.EdgesHelper;THREE.FaceNormalsHelper=function(object,size,hex,linewidth){this.object=object;this.size=size!==undefined?size:1;var color=hex!==undefined?hex:16776960;var width=linewidth!==undefined?linewidth:1;var nNormals=0;var objGeometry=this.object.geometry;if(objGeometry instanceof THREE.Geometry){nNormals=objGeometry.faces.length}else{console.warn("THREE.FaceNormalsHelper: only THREE.Geometry is supported. Use THREE.VertexNormalsHelper, instead.")}var geometry=new THREE.BufferGeometry;var positions=new THREE.Float32Attribute(nNormals*2*3,3);geometry.addAttribute("position",positions);THREE.LineSegments.call(this,geometry,new THREE.LineBasicMaterial({color:color,linewidth:width}));this.matrixAutoUpdate=false;this.update()};THREE.FaceNormalsHelper.prototype=Object.create(THREE.LineSegments.prototype);THREE.FaceNormalsHelper.prototype.constructor=THREE.FaceNormalsHelper;THREE.FaceNormalsHelper.prototype.update=function(){var v1=new THREE.Vector3;var v2=new THREE.Vector3;var normalMatrix=new THREE.Matrix3;return function update(){this.object.updateMatrixWorld(true);normalMatrix.getNormalMatrix(this.object.matrixWorld);var matrixWorld=this.object.matrixWorld;var position=this.geometry.attributes.position;var objGeometry=this.object.geometry;var vertices=objGeometry.vertices;var faces=objGeometry.faces;var idx=0;for(var i=0,l=faces.length;i<l;i++){var face=faces[i];var normal=face.normal;v1.copy(vertices[face.a]).add(vertices[face.b]).add(vertices[face.c]).divideScalar(3).applyMatrix4(matrixWorld);v2.copy(normal).applyMatrix3(normalMatrix).normalize().multiplyScalar(this.size).add(v1);position.setXYZ(idx,v1.x,v1.y,v1.z);idx=idx+1;position.setXYZ(idx,v2.x,v2.y,v2.z);idx=idx+1}position.needsUpdate=true;return this}}();THREE.GridHelper=function(size,step){var geometry=new THREE.Geometry;var material=new THREE.LineBasicMaterial({vertexColors:THREE.VertexColors});this.color1=new THREE.Color(4473924);this.color2=new THREE.Color(8947848);for(var i=-size;i<=size;i+=step){geometry.vertices.push(new THREE.Vector3(-size,0,i),new THREE.Vector3(size,0,i),new THREE.Vector3(i,0,-size),new THREE.Vector3(i,0,size));var color=i===0?this.color1:this.color2;geometry.colors.push(color,color,color,color)}THREE.LineSegments.call(this,geometry,material)};THREE.GridHelper.prototype=Object.create(THREE.LineSegments.prototype);THREE.GridHelper.prototype.constructor=THREE.GridHelper;THREE.GridHelper.prototype.setColors=function(colorCenterLine,colorGrid){this.color1.set(colorCenterLine);this.color2.set(colorGrid);this.geometry.colorsNeedUpdate=true};THREE.HemisphereLightHelper=function(light,sphereSize){THREE.Object3D.call(this);this.light=light;this.light.updateMatrixWorld();this.matrix=light.matrixWorld;this.matrixAutoUpdate=false;this.colors=[new THREE.Color,new THREE.Color];var geometry=new THREE.SphereGeometry(sphereSize,4,2);geometry.rotateX(-Math.PI/2);for(var i=0,il=8;i<il;i++){geometry.faces[i].color=this.colors[i<4?0:1]}var material=new THREE.MeshBasicMaterial({vertexColors:THREE.FaceColors,wireframe:true});this.lightSphere=new THREE.Mesh(geometry,material);this.add(this.lightSphere);this.update()};THREE.HemisphereLightHelper.prototype=Object.create(THREE.Object3D.prototype);THREE.HemisphereLightHelper.prototype.constructor=THREE.HemisphereLightHelper;THREE.HemisphereLightHelper.prototype.dispose=function(){this.lightSphere.geometry.dispose();this.lightSphere.material.dispose()};THREE.HemisphereLightHelper.prototype.update=function(){var vector=new THREE.Vector3;return function(){this.colors[0].copy(this.light.color).multiplyScalar(this.light.intensity);this.colors[1].copy(this.light.groundColor).multiplyScalar(this.light.intensity);this.lightSphere.lookAt(vector.setFromMatrixPosition(this.light.matrixWorld).negate());this.lightSphere.geometry.colorsNeedUpdate=true}}();THREE.PointLightHelper=function(light,sphereSize){this.light=light;this.light.updateMatrixWorld();var geometry=new THREE.SphereGeometry(sphereSize,4,2);var material=new THREE.MeshBasicMaterial({wireframe:true,fog:false});material.color.copy(this.light.color).multiplyScalar(this.light.intensity);THREE.Mesh.call(this,geometry,material);this.matrix=this.light.matrixWorld;this.matrixAutoUpdate=false};THREE.PointLightHelper.prototype=Object.create(THREE.Mesh.prototype);THREE.PointLightHelper.prototype.constructor=THREE.PointLightHelper;THREE.PointLightHelper.prototype.dispose=function(){this.geometry.dispose();this.material.dispose()};THREE.PointLightHelper.prototype.update=function(){this.material.color.copy(this.light.color).multiplyScalar(this.light.intensity)};THREE.SkeletonHelper=function(object){this.bones=this.getBoneList(object);var geometry=new THREE.Geometry;for(var i=0;i<this.bones.length;i++){var bone=this.bones[i];if(bone.parent instanceof THREE.Bone){geometry.vertices.push(new THREE.Vector3);geometry.vertices.push(new THREE.Vector3);geometry.colors.push(new THREE.Color(0,0,1));geometry.colors.push(new THREE.Color(0,1,0))}}geometry.dynamic=true;var material=new THREE.LineBasicMaterial({vertexColors:THREE.VertexColors,depthTest:false,depthWrite:false,transparent:true});THREE.LineSegments.call(this,geometry,material);this.root=object;this.matrix=object.matrixWorld;this.matrixAutoUpdate=false;this.update()};THREE.SkeletonHelper.prototype=Object.create(THREE.LineSegments.prototype);THREE.SkeletonHelper.prototype.constructor=THREE.SkeletonHelper;THREE.SkeletonHelper.prototype.getBoneList=function(object){var boneList=[];if(object instanceof THREE.Bone){boneList.push(object)}for(var i=0;i<object.children.length;i++){boneList.push.apply(boneList,this.getBoneList(object.children[i]))}return boneList};THREE.SkeletonHelper.prototype.update=function(){var geometry=this.geometry;var matrixWorldInv=(new THREE.Matrix4).getInverse(this.root.matrixWorld);var boneMatrix=new THREE.Matrix4;var j=0;for(var i=0;i<this.bones.length;i++){var bone=this.bones[i];if(bone.parent instanceof THREE.Bone){boneMatrix.multiplyMatrices(matrixWorldInv,bone.matrixWorld);geometry.vertices[j].setFromMatrixPosition(boneMatrix);boneMatrix.multiplyMatrices(matrixWorldInv,bone.parent.matrixWorld);geometry.vertices[j+1].setFromMatrixPosition(boneMatrix);j+=2}}geometry.verticesNeedUpdate=true;geometry.computeBoundingSphere()};THREE.SpotLightHelper=function(light){THREE.Object3D.call(this);this.light=light;this.light.updateMatrixWorld();this.matrix=light.matrixWorld;this.matrixAutoUpdate=false;var geometry=new THREE.CylinderGeometry(0,1,1,8,1,true);geometry.translate(0,-.5,0);geometry.rotateX(-Math.PI/2);var material=new THREE.MeshBasicMaterial({wireframe:true,fog:false});this.cone=new THREE.Mesh(geometry,material);this.add(this.cone);this.update()};THREE.SpotLightHelper.prototype=Object.create(THREE.Object3D.prototype);THREE.SpotLightHelper.prototype.constructor=THREE.SpotLightHelper;THREE.SpotLightHelper.prototype.dispose=function(){this.cone.geometry.dispose();this.cone.material.dispose()};THREE.SpotLightHelper.prototype.update=function(){var vector=new THREE.Vector3;var vector2=new THREE.Vector3;return function(){var coneLength=this.light.distance?this.light.distance:1e4;var coneWidth=coneLength*Math.tan(this.light.angle);this.cone.scale.set(coneWidth,coneWidth,coneLength);vector.setFromMatrixPosition(this.light.matrixWorld);vector2.setFromMatrixPosition(this.light.target.matrixWorld);this.cone.lookAt(vector2.sub(vector));this.cone.material.color.copy(this.light.color).multiplyScalar(this.light.intensity)}}();THREE.VertexNormalsHelper=function(object,size,hex,linewidth){this.object=object;this.size=size!==undefined?size:1;var color=hex!==undefined?hex:16711680;var width=linewidth!==undefined?linewidth:1;var nNormals=0;var objGeometry=this.object.geometry;if(objGeometry instanceof THREE.Geometry){nNormals=objGeometry.faces.length*3}else if(objGeometry instanceof THREE.BufferGeometry){nNormals=objGeometry.attributes.normal.count}var geometry=new THREE.BufferGeometry;var positions=new THREE.Float32Attribute(nNormals*2*3,3);geometry.addAttribute("position",positions);THREE.LineSegments.call(this,geometry,new THREE.LineBasicMaterial({color:color,linewidth:width}));this.matrixAutoUpdate=false;this.update()};THREE.VertexNormalsHelper.prototype=Object.create(THREE.LineSegments.prototype);THREE.VertexNormalsHelper.prototype.constructor=THREE.VertexNormalsHelper;THREE.VertexNormalsHelper.prototype.update=function(){var v1=new THREE.Vector3;var v2=new THREE.Vector3;var normalMatrix=new THREE.Matrix3;return function update(){var keys=["a","b","c"];this.object.updateMatrixWorld(true);normalMatrix.getNormalMatrix(this.object.matrixWorld);var matrixWorld=this.object.matrixWorld;var position=this.geometry.attributes.position;var objGeometry=this.object.geometry;if(objGeometry instanceof THREE.Geometry){var vertices=objGeometry.vertices;var faces=objGeometry.faces;var idx=0;for(var i=0,l=faces.length;i<l;i++){var face=faces[i];for(var j=0,jl=face.vertexNormals.length;j<jl;j++){var vertex=vertices[face[keys[j]]];var normal=face.vertexNormals[j];v1.copy(vertex).applyMatrix4(matrixWorld);v2.copy(normal).applyMatrix3(normalMatrix).normalize().multiplyScalar(this.size).add(v1);position.setXYZ(idx,v1.x,v1.y,v1.z);idx=idx+1;position.setXYZ(idx,v2.x,v2.y,v2.z);idx=idx+1}}}else if(objGeometry instanceof THREE.BufferGeometry){var objPos=objGeometry.attributes.position;var objNorm=objGeometry.attributes.normal;var idx=0;for(var j=0,jl=objPos.count;j<jl;j++){v1.set(objPos.getX(j),objPos.getY(j),objPos.getZ(j)).applyMatrix4(matrixWorld);v2.set(objNorm.getX(j),objNorm.getY(j),objNorm.getZ(j));v2.applyMatrix3(normalMatrix).normalize().multiplyScalar(this.size).add(v1);position.setXYZ(idx,v1.x,v1.y,v1.z);idx=idx+1;position.setXYZ(idx,v2.x,v2.y,v2.z);idx=idx+1}}position.needsUpdate=true;return this}}();THREE.WireframeHelper=function(object,hex){var color=hex!==undefined?hex:16777215;THREE.LineSegments.call(this,new THREE.WireframeGeometry(object.geometry),new THREE.LineBasicMaterial({color:color}));this.matrix=object.matrixWorld;this.matrixAutoUpdate=false};THREE.WireframeHelper.prototype=Object.create(THREE.LineSegments.prototype);THREE.WireframeHelper.prototype.constructor=THREE.WireframeHelper;THREE.ImmediateRenderObject=function(material){THREE.Object3D.call(this);this.material=material;this.render=function(renderCallback){}};THREE.ImmediateRenderObject.prototype=Object.create(THREE.Object3D.prototype);THREE.ImmediateRenderObject.prototype.constructor=THREE.ImmediateRenderObject;THREE.MorphBlendMesh=function(geometry,material){THREE.Mesh.call(this,geometry,material);this.animationsMap={};this.animationsList=[];var numFrames=this.geometry.morphTargets.length;var name="__default";var startFrame=0;var endFrame=numFrames-1;var fps=numFrames/1;this.createAnimation(name,startFrame,endFrame,fps);this.setAnimationWeight(name,1)};THREE.MorphBlendMesh.prototype=Object.create(THREE.Mesh.prototype);THREE.MorphBlendMesh.prototype.constructor=THREE.MorphBlendMesh;THREE.MorphBlendMesh.prototype.createAnimation=function(name,start,end,fps){var animation={start:start,end:end,length:end-start+1,fps:fps,duration:(end-start)/fps,lastFrame:0,currentFrame:0,active:false,time:0,direction:1,weight:1,directionBackwards:false,mirroredLoop:false};this.animationsMap[name]=animation;this.animationsList.push(animation)};THREE.MorphBlendMesh.prototype.autoCreateAnimations=function(fps){var pattern=/([a-z]+)_?(\d+)/;var firstAnimation,frameRanges={};var geometry=this.geometry;for(var i=0,il=geometry.morphTargets.length;i<il;i++){var morph=geometry.morphTargets[i];var chunks=morph.name.match(pattern);if(chunks&&chunks.length>1){var name=chunks[1];if(!frameRanges[name])frameRanges[name]={start:Infinity,end:-Infinity};var range=frameRanges[name];if(i<range.start)range.start=i;if(i>range.end)range.end=i;if(!firstAnimation)firstAnimation=name}}for(var name in frameRanges){var range=frameRanges[name];this.createAnimation(name,range.start,range.end,fps)}this.firstAnimation=firstAnimation};THREE.MorphBlendMesh.prototype.setAnimationDirectionForward=function(name){var animation=this.animationsMap[name];if(animation){animation.direction=1;animation.directionBackwards=false}};THREE.MorphBlendMesh.prototype.setAnimationDirectionBackward=function(name){var animation=this.animationsMap[name];if(animation){animation.direction=-1;animation.directionBackwards=true}};THREE.MorphBlendMesh.prototype.setAnimationFPS=function(name,fps){var animation=this.animationsMap[name];if(animation){animation.fps=fps;animation.duration=(animation.end-animation.start)/animation.fps}};THREE.MorphBlendMesh.prototype.setAnimationDuration=function(name,duration){var animation=this.animationsMap[name];if(animation){animation.duration=duration;animation.fps=(animation.end-animation.start)/animation.duration}};THREE.MorphBlendMesh.prototype.setAnimationWeight=function(name,weight){var animation=this.animationsMap[name];if(animation){animation.weight=weight}};THREE.MorphBlendMesh.prototype.setAnimationTime=function(name,time){var animation=this.animationsMap[name];if(animation){animation.time=time}};THREE.MorphBlendMesh.prototype.getAnimationTime=function(name){var time=0;var animation=this.animationsMap[name];if(animation){time=animation.time}return time};THREE.MorphBlendMesh.prototype.getAnimationDuration=function(name){var duration=-1;var animation=this.animationsMap[name];if(animation){duration=animation.duration}return duration};THREE.MorphBlendMesh.prototype.playAnimation=function(name){var animation=this.animationsMap[name];if(animation){animation.time=0;animation.active=true}else{console.warn("THREE.MorphBlendMesh: animation["+name+"] undefined in .playAnimation()")}};THREE.MorphBlendMesh.prototype.stopAnimation=function(name){var animation=this.animationsMap[name];if(animation){animation.active=false}};THREE.MorphBlendMesh.prototype.update=function(delta){for(var i=0,il=this.animationsList.length;i<il;i++){var animation=this.animationsList[i];if(!animation.active)continue;var frameTime=animation.duration/animation.length;animation.time+=animation.direction*delta;if(animation.mirroredLoop){if(animation.time>animation.duration||animation.time<0){animation.direction*=-1;if(animation.time>animation.duration){animation.time=animation.duration;animation.directionBackwards=true}if(animation.time<0){animation.time=0;animation.directionBackwards=false}}}else{animation.time=animation.time%animation.duration;if(animation.time<0)animation.time+=animation.duration}var keyframe=animation.start+THREE.Math.clamp(Math.floor(animation.time/frameTime),0,animation.length-1);var weight=animation.weight;if(keyframe!==animation.currentFrame){this.morphTargetInfluences[animation.lastFrame]=0;this.morphTargetInfluences[animation.currentFrame]=1*weight;this.morphTargetInfluences[keyframe]=0;animation.lastFrame=animation.currentFrame;animation.currentFrame=keyframe}var mix=animation.time%frameTime/frameTime;if(animation.directionBackwards)mix=1-mix;if(animation.currentFrame!==animation.lastFrame){this.morphTargetInfluences[animation.currentFrame]=mix*weight;this.morphTargetInfluences[animation.lastFrame]=(1-mix)*weight}else{this.morphTargetInfluences[animation.currentFrame]=weight}}};if(typeof exports!=="undefined"){if(typeof module!=="undefined"&&module.exports){exports=module.exports=THREE}exports.THREE=THREE}else{this["THREE"]=THREE}},{}]},{},[2]);
</script>
</body>
</html>
